refactor(auth): 重构认证模块以支持双token模式

将用户认证逻辑从user store迁移到token store
新增双token模式支持及相关类型定义
更新路由拦截器和http模块以适配新的认证结构
This commit is contained in:
feige996
2025-08-22 16:16:17 +08:00
parent 57924d47cc
commit 153a374469
8 changed files with 184 additions and 121 deletions

View File

@@ -1,4 +1,4 @@
import type { ICaptcha, IUpdateInfo, IUpdatePassword, IUserInfoVo, IUserLogin } from './types/login'
import type { IAuthLoginRes, ICaptcha, IDoubleTokenRes, IUpdateInfo, IUpdatePassword, IUserInfoRes } from './types/login'
import { http } from '@/http/http'
/**
@@ -24,7 +24,7 @@ export function getCode() {
* @param loginForm 登录表单
*/
export function login(loginForm: ILoginForm) {
return http.post<IUserLogin>('/user/login', loginForm)
return http.post<IAuthLoginRes>('/auth/login', loginForm)
}
/**
@@ -32,21 +32,21 @@ export function login(loginForm: ILoginForm) {
* @param refreshToken 刷新token
*/
export function refreshToken(refreshToken: string) {
return http.post<IUserLogin>('/user/refreshToken', { refreshToken })
return http.post<IDoubleTokenRes>('/auth/refreshToken', { refreshToken })
}
/**
* 获取用户信息
*/
export function getUserInfo() {
return http.get<IUserInfoVo>('/user/info')
return http.get<IUserInfoRes>('/user/info')
}
/**
* 退出登录
*/
export function logout() {
return http.get<void>('/user/logout')
return http.get<void>('/auth/logout')
}
/**
@@ -77,15 +77,11 @@ export function getWxCode() {
})
}
/**
* 微信登录参数
*/
/**
* 微信登录
* @param params 微信登录参数包含code
* @returns Promise 包含登录结果
*/
export function wxLogin(data: { code: string }) {
return http.post<IUserLogin>('/user/wxLogin', data)
return http.post<IAuthLoginRes>('/auth/wxLogin', data)
}

View File

@@ -1,24 +1,42 @@
/**
* 用户信息
*/
export interface IUserInfoVo {
id: number | string
username: string
avatar: string
// 认证模式类型
export type AuthMode = 'single' | 'double'
// 单Token响应类型
export interface ISingleTokenRes {
token: string
refreshToken?: string
refreshExpire?: number
expiresIn: number // 有效期(秒)
}
// 双Token响应类型
export interface IDoubleTokenRes {
accessToken: string
refreshToken: string
accessExpiresIn: number // 访问令牌有效期(秒)
refreshExpiresIn: number // 刷新令牌有效期(秒)
}
/**
* 登录返回的信息
* 登录返回的信息,其实就是 token 信息
*/
export interface IUserLogin {
id: string
export type IAuthLoginRes = ISingleTokenRes | IDoubleTokenRes
/**
* 用户信息
*/
export interface IUserInfoRes {
userId: number
username: string
token: string
refreshToken?: string
refreshExpire?: number
nickname: string
avatar?: string
[key: string]: any // 允许其他扩展字段
}
// 认证存储数据结构
export interface AuthStorage {
mode: AuthMode
tokens: ISingleTokenRes | IDoubleTokenRes
userInfo?: IUserInfoRes
loginTime: number // 登录时间戳
}
/**