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}`)