From 5d105786aac1456681ca6e0654e0816663c4ea9b Mon Sep 17 00:00:00 2001 From: bob <312777916@qq.com> Date: Fri, 23 Aug 2024 11:42:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=B7=E6=96=B0token?= =?UTF-8?q?=E7=9A=84=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/common.js | 16 ++++++++++++++++ src/api/user.js | 4 +++- src/stores/user.js | 12 ++++++------ src/utils/request.js | 10 +++++++++- 4 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 src/api/common.js diff --git a/src/api/common.js b/src/api/common.js new file mode 100644 index 0000000..cbdd2fb --- /dev/null +++ b/src/api/common.js @@ -0,0 +1,16 @@ +import request from '@/utils/request' +import { CLIENT_TYPE, CLIENT_NAME, CLIENT_VERSION } from '@/const/userConst' +import { userStore } from '@/stores' + +export const refreshToken = async () => { + const userData = userStore() + const now = new Date().getTime() + if (now > userData.at.expiretime && now <= userData.rt.expiretime) { + const res = await request.post('/user/refreshToken', { + clientType: CLIENT_TYPE, + clientName: CLIENT_NAME, + clientVersion: CLIENT_VERSION + }) + userData.setAt(res.data.data.accessToken) + } +} diff --git a/src/api/user.js b/src/api/user.js index 9f15477..f31a7c0 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -1,5 +1,6 @@ import request from '@/utils/request' import { CLIENT_TYPE, CLIENT_NAME, CLIENT_VERSION, CLIENT_ID } from '@/const/userConst' +import { refreshToken } from '@/api/common' export const userRegisterService = ({ username, password }) => { return request.post('/user/register', { @@ -23,7 +24,8 @@ export const userLoginService = ({ username, password }) => { }) } -export const userInfoService = () => { +export const userInfoService = async () => { + await refreshToken() return request.post('/user/querySelf', { clientType: CLIENT_TYPE, clientName: CLIENT_NAME, diff --git a/src/stores/user.js b/src/stores/user.js index 90d5bc0..0ebfe77 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -10,19 +10,19 @@ export const userStore = defineStore( const at = ref({ token: '', secret: '', - expiretime: null + expiretime: 0 }) const rt = ref({ token: '', secret: '', - expiretime: null + expiretime: 0 }) const setAt = (newAt) => { const now = new Date() at.value = { token: newAt.token, secret: newAt.secret, - expiretime: new Date(now.getTime() + newAt.expire * 1000) + expiretime: now.getTime() + newAt.expire * 1000 } } const setRt = (newRt) => { @@ -30,21 +30,21 @@ export const userStore = defineStore( rt.value = { token: newRt.token, secret: newRt.secret, - expiretime: new Date(now.getTime() + newRt.expire * 1000) + expiretime: now.getTime() + newRt.expire * 1000 } } const clearAt = () => { at.value = { token: '', secret: '', - expiretime: null + expiretime: 0 } } const clearRt = () => { rt.value = { token: '', secret: '', - expiretime: null + expiretime: 0 } } diff --git a/src/utils/request.js b/src/utils/request.js index b5b143c..f8fe436 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -25,7 +25,15 @@ const generateSign = (key, content) => { instance.interceptors.request.use( (config) => { const userData = userStore() - if (userData.at) { + if (config.url === '/user/refreshToken' && userData.rt.token !== '') { + const traceId = uuidv4() + const timestamp = Math.floor(new Date().getTime() / 1000) + const sigh = generateSign(userData.rt.secret, `${traceId}${timestamp}`) + config.headers.traceId = traceId + config.headers.timestamp = timestamp + config.headers.sign = sigh + config.headers.refreshToken = userData.rt.token + } else if (userData.at.token !== '') { const traceId = uuidv4() const timestamp = Math.floor(new Date().getTime() / 1000) const sigh = generateSign(userData.at.secret, `${traceId}${timestamp}`)