Преглед изворни кода

单点登录 token失效、401时跳回登录

tyler пре 2 година
родитељ
комит
c85debbf78
2 измењених фајлова са 25 додато и 19 уклоњено
  1. 5 5
      src/permission.js
  2. 20 14
      src/utils/request.js

+ 5 - 5
src/permission.js

@@ -1,10 +1,10 @@
 import getPageTitle from '@/utils/get-page-title'
 import usersInfo from '@/utils/usersInfo'
-import NProgress from 'nprogress'; // progress bar
-import 'nprogress/nprogress.css'; // progress bar style
+import NProgress from 'nprogress' // progress bar
+import 'nprogress/nprogress.css' // progress bar style
 import router, { resetRouter } from './router'
 import store from './store'
- 
+
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
 const whiteList = ['/login', '/auth-redirect', '/login-by-backend'] // no redirect whitelist
@@ -17,7 +17,7 @@ router.beforeEach(async(to, from, next) => {
   document.title = getPageTitle(to.meta.title)
 
   // determine whether the user has logged in
-  const hasToken = usersInfo.hasLogin() //getToken()
+  const hasToken = usersInfo.hasLogin() // getToken()
   if (hasToken) {
     if (to.path === '/login') {
       // if is logged in, redirect to the home page
@@ -33,7 +33,7 @@ router.beforeEach(async(to, from, next) => {
           // get user info
           // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
           // const { roles } = await store.dispatch('user/getInfo')
-          const { roles } = ['admin'];
+          const { roles } = ['admin']
           resetRouter()
           // generate accessible routes map based on roles
           const accessRoutes = await store.dispatch('permission/generateRoutes', roles)

+ 20 - 14
src/utils/request.js

@@ -1,9 +1,9 @@
+import router from '@/router'
 import axios from 'axios'
 import { Message } from 'element-ui'
-import Cookies from "js-cookie"
+import Cookies from 'js-cookie'
 import tool from './tool'
 import usersInfo from './usersInfo'
-
 // create an axios instance
 const service = axios.create({
   baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
@@ -28,15 +28,15 @@ service.interceptors.request.use(
     // 设置语言
     config.headers['language'] = Cookies.get('language')
 
-    if (usersInfo.accessToken() && usersInfo.accessTokenExpiresIn()
-    && parseInt(usersInfo.accessTokenExpiresIn()) + parseInt(usersInfo.accessTokenUpdateAt()) - 30 > parseInt(tool.getTimestamp())) {
-    } else if(usersInfo.accessToken()) {
+    if (usersInfo.accessToken() && usersInfo.accessTokenExpiresIn() &&
+    parseInt(usersInfo.accessTokenExpiresIn()) + parseInt(usersInfo.accessTokenUpdateAt()) - 30 > parseInt(tool.getTimestamp())) {
+    } else if (usersInfo.accessToken()) {
       // 需要先刷新token
-      let refreshToken = usersInfo.refreshToken()
-      let refreshTokenExpiresIn = usersInfo.refreshTokenExpiresIn()
-      let refreshTokenUpdateAt = usersInfo.refreshTokenUpdateAt()
-      if (refreshToken && refreshTokenExpiresIn
-        && parseInt(refreshTokenExpiresIn) - 30 + parseInt(refreshTokenUpdateAt) > parseInt(tool.getTimestamp())) {
+      const refreshToken = usersInfo.refreshToken()
+      const refreshTokenExpiresIn = usersInfo.refreshTokenExpiresIn()
+      const refreshTokenUpdateAt = usersInfo.refreshTokenUpdateAt()
+      if (refreshToken && refreshTokenExpiresIn &&
+        parseInt(refreshTokenExpiresIn) - 30 + parseInt(refreshTokenUpdateAt) > parseInt(tool.getTimestamp())) {
         // 有效,去更新
         axios.get(`${process.env.VUE_APP_BASE_API}/v1/oauth/refresh-token?refresh-token=${refreshToken}`).then(response => {
           // 更新本地accessToken
@@ -46,8 +46,7 @@ service.interceptors.request.use(
           usersInfo.refreshToken(response.data.refreshToken)
           usersInfo.refreshTokenExpiresIn(response.data.refreshTokenExpiresIn)
           usersInfo.refreshTokenUpdateAt(response.data.refreshTokenUpdateAt)
-          usersInfo.accessToken()
-
+          usersInfo.accessToken()
         }).catch(error => {
           Message({
             message: 'accessToken Failed',
@@ -57,7 +56,7 @@ service.interceptors.request.use(
           return
         })
       } else {
-        //console.log('refreshToken已失效');
+        // console.log('refreshToken已失效');
         usersInfo.clear()
         Message({
           message: 'refreshToken Invalid',
@@ -72,7 +71,7 @@ service.interceptors.request.use(
   },
   error => {
     // do something with request error
-    console.log('请求报错----->',error) // for debug
+    console.log('请求报错----->', error) // for debug
     return Promise.reject(error)
   }
 )
@@ -137,6 +136,13 @@ service.interceptors.response.use(
         default:
       }
     }
+    if (err.response.data.status == 401) {
+      localStorage.clear()
+      router.replace({
+        path: '/login',
+        query: { redirect: router.currentRoute.fullPath }
+      })
+    }
     // Message({
     //   message: err.message || 'Error',
     //   type: 'error',