feat: 重构HTTP客户端架构和认证系统
核心改进: - HTTP客户端:工厂函数模式,支持自定义拦截器和401/403处理 - 认证服务:函数式实现,消除this绑定问题,支持业务码+HTTP状态码双通道 - Token管理:简化为直接实例导出,移除bind()和箭头函数包装 - 路由守卫:优化逻辑,移除冗余代码,更简洁易维护 技术亮点: - 统一401/403错误处理(业务code和HTTP status双检查) - 自动刷新token并重试请求,保留自定义拦截器 - 分层清晰:clientAxios (Mono) -> http (应用) -> AuthService - 支持扩展:业务代码可创建自定义HTTP实例并添加拦截器 文件变更: - 新增 AuthService.js (函数式) 和 Login.vue - 重构 http.js、token-manager.js、router/index.js - 删除 TokenInput.vue、utils/auth.js 等冗余文件 - 更新所有API调用点使用直接实例导入 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { ref, computed, watch } from 'vue'
|
||||
import { defineStore } from 'pinia'
|
||||
import { getJSON, setJSON, remove } from '@/utils/storage'
|
||||
import { clearAllTokens } from '@gold/utils/token-manager'
|
||||
// 直接使用实例(最简单、最可靠)
|
||||
import tokenManager from '@gold/utils/token-manager'
|
||||
|
||||
// 本地持久化的 key
|
||||
const STORAGE_KEY = 'user_store_v1'
|
||||
@@ -115,12 +116,13 @@ export const useUserStore = defineStore('user', () => {
|
||||
try {
|
||||
// 使用公共 hook 获取用户信息
|
||||
const { getUserInfo } = await import('@gold/hooks/web/useUserInfo')
|
||||
const { getToken } = await import('@gold/utils/token-manager')
|
||||
|
||||
// 导入 tokenManager 获取 token
|
||||
const tokenManager = (await import('@gold/utils/token-manager')).default
|
||||
|
||||
const userInfo = await getUserInfo({
|
||||
getToken,
|
||||
getToken: () => tokenManager.getAccessToken()
|
||||
})
|
||||
|
||||
|
||||
if (userInfo) {
|
||||
// 更新用户信息
|
||||
userId.value = String(userInfo.id || userInfo.userId || userId.value)
|
||||
@@ -142,11 +144,11 @@ export const useUserStore = defineStore('user', () => {
|
||||
async function logout() {
|
||||
// 1. 清空所有 token
|
||||
try {
|
||||
clearAllTokens()
|
||||
tokenManager.clearTokens()
|
||||
} catch (e) {
|
||||
console.error('清空 token 失败:', e)
|
||||
}
|
||||
|
||||
|
||||
// 2. 清空用户信息
|
||||
isLoggedIn.value = false
|
||||
userId.value = ''
|
||||
@@ -159,7 +161,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
balance.value = 0
|
||||
vipLevel.value = 0
|
||||
credits.value = 0
|
||||
|
||||
|
||||
// 3. 删除本地存储的用户数据
|
||||
await remove(STORAGE_KEY)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user