增加刷新token的流程

This commit is contained in:
bob
2024-08-23 11:42:19 +08:00
parent 0519917463
commit 5d105786aa
4 changed files with 34 additions and 8 deletions

16
src/api/common.js Normal file
View File

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

View File

@@ -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,

View File

@@ -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
}
}

View File

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