Pārlūkot izejas kodu

修改登录

修改登录
dangyunlong 2 mēneši atpakaļ
vecāks
revīzija
276d0031a4
5 mainītis faili ar 165 papildinājumiem un 31 dzēšanām
  1. 2 1
      src/store/getters.js
  2. 27 8
      src/store/modules/user.js
  3. 14 0
      src/utils/auth.js
  4. 7 3
      src/utils/request.js
  5. 115 19
      src/views/login/index.vue

+ 2 - 1
src/store/getters.js

@@ -12,6 +12,7 @@ const getters = {
   roles: state => state.user.roles,
   permission_routes: state => state.permission.routes,
   errorLogs: state => state.errorLog.logs,
-  SiteId: state => state.template.editWebsiteId
+  SiteId: state => state.template.editWebsiteId,
+  userurl: state => state.user.userurl
 }
 export default getters

+ 27 - 8
src/store/modules/user.js

@@ -1,5 +1,5 @@
 import { login, logout, getInfo, getMenu ,getImgCode,updateUserAvatarNickname } from '@/api/user'
-import { getToken, setToken, removeToken } from '@/utils/auth'
+import { getToken, setToken, setUserUrl, removeToken ,removUserUrl,getUserUrl } from '@/utils/auth'
 import router, { resetRouter } from '@/router'
 
 const state = {
@@ -9,13 +9,17 @@ const state = {
   introduction: '',
   roles: [],
   userid:'',
-  role_id:''
+  role_id:'',
+  userurl: getUserUrl(),
 }
 
 const mutations = {
   SET_TOKEN: (state, token) => {
     state.token = token
   },
+  SET_URL: (state, url) => {
+    state.userurl = url
+  },
   SET_INTRODUCTION: (state, introduction) => {
     state.introduction = introduction
   },
@@ -36,10 +40,17 @@ const mutations = {
   },
   // 退出登录逻辑直接放在 mutations 中
   LOGOUT(state) {
-    state.token = ''
-    state.roles = []
-    removeToken()
-    resetRouter()
+    state.token = '';
+    state.userurl = '';
+    state.roles = [];
+    state.userid = '';
+    state.role_id = '';
+    state.name = '';
+    state.avatar = '';
+    state.introduction = '';
+    removeToken();
+    removUserUrl();
+    resetRouter();
   }
 }
 
@@ -49,9 +60,17 @@ const actions = {
     const { username, password, type, captcha } = userInfo
     return new Promise((resolve, reject) => {
       login({ username: username.trim(), password: password, type: type, captcha: captcha.trim() }).then(response => {
-        const { data } = response
-        commit('SET_TOKEN', data.token)
+        const { data } = response;
+        //设置token
         setToken(data.token,data.exp)
+        commit('SET_TOKEN',data.token)
+        //如果用户登录携带了userurl 就存起来
+        if(userInfo.userurl){
+          //设置backurl
+          setUserUrl(userInfo.userurl,data.exp)
+          commit('SET_URL',userInfo.userurl)
+        }
+      
         resolve(response)
       }).catch(error => {
         reject(error)

+ 14 - 0
src/utils/auth.js

@@ -1,6 +1,7 @@
 import Cookies from 'js-cookie'
 
 const TokenKey = 'Admin-Token'
+const useUrl = 'Back-Url'
 
 export function getToken() {
   return Cookies.get(TokenKey)
@@ -11,10 +12,23 @@ export function setToken(token,exp) {
   return Cookies.set(TokenKey, token, { expires: expdays })
 }
 
+export function setUserUrl(url,exp) {
+  const expdays = convertSecondsToDays(exp)
+  return Cookies.set(useUrl, url, { expires: expdays })
+}
+
+export function getUserUrl() {
+  return Cookies.get(useUrl)
+}
+
 export function removeToken() {
   return Cookies.remove(TokenKey)
 }
 
+export function removUserUrl() {
+  return Cookies.remove(useUrl)
+}
+
 //把秒转换成天
 function convertSecondsToDays(seconds) {
   return seconds/(60*60*24); //1天=60秒*60分钟*24小时

+ 7 - 3
src/utils/request.js

@@ -1,7 +1,7 @@
 import axios from 'axios'
 import { MessageBox, Message } from 'element-ui'
 import store from '@/store'
-import { getToken } from '@/utils/auth'
+import { getToken,getUserUrl } from '@/utils/auth'
 import URL from '@/utils/baseUrl';
 
 // create an axios instance
@@ -23,9 +23,13 @@ service.interceptors.request.use(
       // please modify it according to the actual situation
       config.headers['token'] = getToken()
     }
-    if (store.getters.SiteId) {
-      config.headers['SiteId'] = store.getters.SiteId
+    if(store.getters.userurl){
+      //如果用户登录携带了userurl 就存起来
+      config.headers['userurl'] = getUserUrl()
     }
+    // if (store.getters.SiteId) {
+    //   config.headers['SiteId'] = store.getters.SiteId
+    // }
     return config
   },
   error => {

+ 115 - 19
src/views/login/index.vue

@@ -81,10 +81,10 @@
                 <div class="reloadBtn" @click="getImgCode">看不清?换一张图</div>
               </div>
             </div>
-            <el-button :loading="loading" type="primary" class="loginBtn" @click.native.prevent="handleLogin">
+            <el-button :loading="loading" type="primary" class="loginBtn" @click.native.prevent="singleLogin">
               登录
             </el-button>
-            <div class="singleLogin" @click="singleLogin"><i class="el-icon-cloudy" /> 单点登录测试</div>
+            <!-- <div class="singleLogin" @click="singleLogin"><i class="el-icon-cloudy" /> 单点登录测试</div> -->
           </el-form>
           <!--开始验证表单 end-->
         </div>
@@ -258,21 +258,89 @@ export default {
       }
       return null; // 如果没有找到 backurl 参数,返回 null
     },
-    //测试单点登录
+    //登录分路器 start ---------------------------------------->
     singleLogin() {
-      // 获取当前页面的 URL
-      const currentUrl = window.location.href;
+      // 获得当前域名
+      const urlString = window.location.href;
+      // 创建一个URL对象
+      const url = new URL(urlString);
+      // 获取hash部分(即#后面的部分)
+      const hash = url.hash;
+      // 从hash中提取查询参数
+      const hashParams = new URLSearchParams(hash.split('?')[1]);
+      // 获取backurl参数的值
+      const backurl = hashParams.get('backurl');
+      // 获取backurl参数的值
+      const userurl = hashParams.get('userurl');
 
-      const backurlValue = this.getBackUrl(currentUrl);
-      if (backurlValue) {
-        //console.log('backurl:', backurlValue); // 打印 backurl 的值
-        //存在backurl 准备进行单点登录
-        //回调地址backurlValue
+      // 解码backurl
+      const decodedBackurl = decodeURIComponent(backurl);
+      const decodedUserurl = decodeURIComponent(userurl);
+
+      // 第一种情况, 不含有backUrl或者userUrl 说明登录者是超级管理员
+      if(hashParams.size==0){
+        console.log("执行超级管理员登录!")
+        this.login(1)
+      }else{
+        // 第二种情况,含有backurl 说明是单点登录
+        if(backurl!=null){
+          console.log("执行单点登录!")
+          const backurlObj = new URL(decodedBackurl);
+          const back_url = backurlObj.hostname;
+          this.login(2)
+
+        }else if(userurl!=null){
+          console.log("执行会员登录!")
+          const backurlObj = new URL(decodedUserurl);
+          const user_url = backurlObj.hostname;
+          this.login(3,user_url)
+
+        }else{
+          this.$message.error("检查登录链接失败,请从正规渠道登录!")
+        }
+      }
+
+    },
+    // 登录分路器 end ---------------------------------------->
+    // 登录 start ---------------------------------------->
+    login(type,url){
+      //超级管理员登录
+      if(type==1){
+        this.$refs.loginForm.validate(valid => {
+          if (valid) {
+            this.loading = true
+            this.$store.dispatch('user/login', this.loginForm).then( res => {
+              this.loading = false
+              console.log(res)
+              if(res.code==0){
+                this.$message({
+                  type:'error',
+                  message:res.message
+                })
+              }else if(res.code==200){
+                console.log("登录成功,将跳转至详情页面!")
+                this.$router.push({ path: this.redirect || '/', query: this.otherQuery })
+              }else if(res.code!=0&&res.code!=200){
+                this.$message({
+                  type:'error',
+                  message:"用户不存在!"
+                })
+              }
+            })
+          }else {
+            console.log('表单填写错误!请检查!')
+            return false;
+          }
+        })
+      }
+      //单点登录
+      if(type==2){
+        // 获取当前页面的 URL
+        const currentUrl = window.location.href;
+        const backurlValue = this.getBackUrl(currentUrl);
         
         this.$refs.loginForm.validate(valid => {
-        if (valid) {
-            //console.log(this.loginForm)
-            //开始登录
+          if (valid) {
             this.loading = true
             this.$store.dispatch('user/login', this.loginForm)
               .then( res => {
@@ -285,8 +353,6 @@ export default {
                   })
                 }else if(res.code==200){
                   console.log("单点登录成功,开始启动跳转!")
-                  // res.data.token
-                  // backurlValue
                   window.location.href = 'http://admindev.bjzxtw.org.cn/auth/back_login.php?backurl=' + backurlValue + '&token='+res.data.token;
 
                 }else if(res.code!=0&&res.code!=200){
@@ -304,12 +370,42 @@ export default {
             return false
           }
         })
-      } else {
-        //没有backurl 直接走登录接口
-        this.handleLogin()
+
+      }
+      //会员登录
+      if(type==3){
+        this.$refs.loginForm.validate(valid => {
+          if (valid) {
+            this.loading = true;
+            this.loginForm.userurl = url;
+            //console.log(this.loginForm)
+            this.$store.dispatch('user/login', this.loginForm).then( res => {
+              this.loading = false
+              console.log(res)
+              if(res.code==0){
+                this.$message({
+                  type:'error',
+                  message:res.message
+                })
+              }else if(res.code==200){
+                console.log("登录成功,将跳转至详情页面!")
+                this.$router.push({ path: this.redirect || '/', query: this.otherQuery })
+              }else if(res.code!=0&&res.code!=200){
+                this.$message({
+                  type:'error',
+                  message:"用户不存在!"
+                })
+              }
+            })
+
+          }else {
+            console.log('表单填写错误!请检查!')
+            return false;
+          }
+        })
       }
     }
-    // 单点登录 end ---------------------------------------->
+    // 登录 end ---------------------------------------->
   }
 }
 </script>