整合前端仓库并保留提交历史
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import { useMemberStore } from '~/stores/member'
|
||||
import { getMemberProfile } from '~/api/member'
|
||||
import { refreshToken } from '~/api/auth'
|
||||
|
||||
export default defineNuxtPlugin(async () => {
|
||||
// 仅在客户端执行
|
||||
if (!import.meta.client) return
|
||||
|
||||
// 等待一下让 pinia 持久化插件完成初始化
|
||||
await new Promise(resolve => setTimeout(resolve, 100))
|
||||
|
||||
const memberStore = useMemberStore()
|
||||
|
||||
// 如果没有 token 但有 refreshToken,尝试刷新
|
||||
if (memberStore.refreshToken && !memberStore.token) {
|
||||
try {
|
||||
const response: any = await refreshToken(memberStore.refreshToken)
|
||||
|
||||
if (response.code === 0 && response.data) {
|
||||
memberStore.token = response.data.access_token
|
||||
memberStore.refreshToken = response.data.refresh_token
|
||||
} else {
|
||||
memberStore.logout()
|
||||
}
|
||||
} catch (error) {
|
||||
memberStore.logout()
|
||||
}
|
||||
} else if (memberStore.token && memberStore.refreshToken) {
|
||||
// 如果有 token 和 refreshToken,尝试获取用户信息
|
||||
try {
|
||||
const data: any = await getMemberProfile()
|
||||
|
||||
if (data && data.id) {
|
||||
memberStore.info = data
|
||||
} else {
|
||||
memberStore.info = null
|
||||
}
|
||||
} catch (error: any) {
|
||||
// 如果是 401 错误,尝试刷新 token
|
||||
if (error?.message?.includes('401') || error?.response?.status === 401) {
|
||||
try {
|
||||
const refreshResponse: any = await refreshToken(memberStore.refreshToken)
|
||||
|
||||
if (refreshResponse.code === 0 && refreshResponse.data) {
|
||||
memberStore.token = refreshResponse.data.access_token
|
||||
memberStore.refreshToken = refreshResponse.data.refresh_token
|
||||
|
||||
// 刷新成功后重新获取用户信息
|
||||
const userInfo: any = await getMemberProfile()
|
||||
if (userInfo && userInfo.id) {
|
||||
memberStore.info = userInfo
|
||||
}
|
||||
} else {
|
||||
memberStore.logout()
|
||||
}
|
||||
} catch (refreshError) {
|
||||
memberStore.logout()
|
||||
}
|
||||
} else {
|
||||
memberStore.info = null
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user