Browse Source

请求拦截器增加刷新token

root 3 năm trước cách đây
mục cha
commit
08394cca07
1 tập tin đã thay đổi với 41 bổ sung1 xóa
  1. 41 1
      src/utils/request.js

+ 41 - 1
src/utils/request.js

@@ -2,6 +2,7 @@ import axios from 'axios'
 import { MessageBox, Message } from 'element-ui'
 import store from '@/store'
 import usersInfo from './usersInfo'
+import tool from './tool'
 
 // create an axios instance
 const service = axios.create({
@@ -24,6 +25,46 @@ service.interceptors.request.use(
     if (usersInfo.accessToken()) {
       config.headers['Authorization'] = process.env.VUE_APP_ACCESS_TOKEN_PREFIX + 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())) {
+        // 有效,去更新
+        axios.get(`${process.env.VUE_APP_BASE_API}/v1/oauth/refresh-token?refresh-token=${refreshToken}`).then(response => {
+          // 更新本地accessToken
+          usersInfo.accessToken(response.data.accessToken)
+          usersInfo.accessTokenExpiresIn(response.data.accessTokenExpiresIn)
+          usersInfo.accessTokenUpdateAt(response.data.accessTokenUpdateAt)
+          usersInfo.refreshToken(response.data.refreshToken)
+          usersInfo.refreshTokenExpiresIn(response.data.refreshTokenExpiresIn)
+          usersInfo.refreshTokenUpdateAt(response.data.refreshTokenUpdateAt)
+          usersInfo.accessToken()
+
+        }).catch(error => {
+          Message({
+            message: 'accessToken Failed',
+            type: 'error',
+            duration: 5 * 1000
+          })
+          return
+        })
+      } else {
+        //console.log('refreshToken已失效');
+        usersInfo.clear()
+        Message({
+          message: 'refreshToken Invalid',
+          type: 'error',
+          duration: 5 * 1000
+        })
+        return
+      }
+    }
+
     return config
   },
   error => {
@@ -51,7 +92,6 @@ service.interceptors.response.use(
     })
     return
   } else {
-    console.log(responseData)
     if (!data) {
       return {data: responseData}
     }