feat: 适配5.x后端,重构前端架构
主要变更: 1. 重构API目录结构,采用模块化设计,适配5.x后端接口规范 2. 优化布局组件,提升用户界面体验 3. 增强国际化支持,完善多语言配置 4. 新增权限控制功能,支持前端路由权限管理 5. 优化认证流程,支持JWT认证机制 6. 新增中间件和插件,提升系统扩展性 7. 优化状态管理,采用更清晰的模块化设计 8. 新增搜索框、广告等组件,丰富页面功能 9. 更改包管理工具从npm到pnpm,提升依赖管理效率 10. 完善配置系统,支持多环境配置 适配5.x后端特性: - 采用新的API接口规范 - 支持JWT认证机制 - 适配后端权限控制体系 - 支持后端国际化接口 - 优化数据交互方式
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