瀏覽代碼

使用 cookie 代替 token 记录认证状态

reghao 2 年之前
父節點
當前提交
bcf59dd70a
共有 4 個文件被更改,包括 40 次插入13 次删除
  1. 12 6
      src/utils/request.js
  2. 1 1
      src/views/sso/forget.vue
  3. 26 5
      src/views/sso/login.vue
  4. 1 1
      src/views/sso/register.vue

+ 12 - 6
src/utils/request.js

@@ -21,7 +21,7 @@ Vue.prototype.$http = axios // 并发请求
 const loading = null
 
 // 请求拦截器
-/* instance.interceptors.request.use(config => {
+instance.interceptors.request.use(config => {
   const token = store.getters.token
   if (token) {
     // 在请求的 Authorization 首部添加 token
@@ -31,9 +31,16 @@ const loading = null
 }, error => {
   return Promise.reject(error)
 }
-)*/
+)
+
+/*instance.interceptors.request.use(config => {
+  const token = Vue.$cookies.get('token')
+  if (token === null) {
+    console.log('no cookie exist')
+  } else {
+    console.log('token in cookie: ' + token)
+  }
 
-instance.interceptors.request.use(config => {
   const accessToken = getAccessToken()
   const refreshToken = getRefreshToken()
   if (accessToken) {
@@ -63,8 +70,7 @@ instance.interceptors.request.use(config => {
   return config
 }, error => {
   return Promise.reject(error)
-}
-)
+})*/
 
 // 响应拦截器
 instance.interceptors.response.use(
@@ -90,7 +96,7 @@ instance.interceptors.response.use(
           console.log('401 错误...')
           store.commit('delToken')
           router.replace({
-            path: '/login',
+            path: '/sso/login',
             query: {
               redirect: router.currentRoute.fullPath
             }

+ 1 - 1
src/views/sso/forget.vue

@@ -194,7 +194,7 @@ export default {
 
             this.$refs.form.resetFields()
             setTimeout(() => {
-              this.$router.push('/auth/login')
+              this.$router.push('/sso/login')
             }, 1500)
           } else {
             this.$notify({

+ 26 - 5
src/views/sso/login.vue

@@ -82,11 +82,13 @@
 
 <script>
 import {ServeCaptcha, ServeLogin, ServePubkey, ServeSendVerifyCode} from '@/api/auth'
+import { setUserToken, getUserInfo } from '@/utils/auth'
 import { userMixin } from 'assets/js/mixin'
 import { isMobile } from '@/utils/validate'
 import SmsLock from "@/utils/sms-lock"
 import { JSEncrypt } from 'jsencrypt'
 import Cookies from 'js-cookie'
+import Vue from "vue";
 
 export default {
   mixins: [userMixin],
@@ -155,9 +157,20 @@ export default {
     })
   },
   created() {
-    this.getCaptcha()
-    this.getPubkey()
-    this.smsLockObj = new SmsLock('LOGIN_SMS', 60)
+    const token = Vue.$cookies.get('token')
+    if (token !== null) {
+      this.$router.push('/')
+      return
+    }
+
+    const user = getUserInfo()
+    if (user === null) {
+      this.getCaptcha()
+      this.getPubkey()
+      this.smsLockObj = new SmsLock('LOGIN_SMS', 60)
+    } else {
+      this.$router.push('/')
+    }
   },
   destroyed() {
     this.smsLockObj.clearInterval()
@@ -213,8 +226,15 @@ export default {
         captchaCode: this.form.captchaCode
       }).then(res => {
           if (res.code === 0) {
-            let result = res.data
-            const token = result.userToken.accessToken
+            const resData = res.data
+            const userInfo = resData.userInfo
+            const userToken = resData.userToken
+
+            // 保存授权信息到本地缓存
+            setUserToken(userToken)
+            this.$store.commit('UPDATE_USER_INFO', userInfo)
+
+            const token = userToken.accessToken
             //取得登录接口的token后,在统一登录中心域名底下设置cookie
             Cookies.set('token', token, {
               Secure: true,
@@ -226,6 +246,7 @@ export default {
               //向父窗口发送登录成功的消息
               window.parent.postMessage({ type: 'loginSuccess' }, '*')
             }
+            this.$router.push('/')
           } else {
             this.$notify.info({
               title: '提示',

+ 1 - 1
src/views/sso/register.vue

@@ -245,7 +245,7 @@ export default {
 
             this.$refs.form.resetFields()
             setTimeout(() => {
-              this.toLink('/auth/login')
+              this.toLink('/sso/login')
             }, 1500)
           } else {
             this.$notify.info({