// 认证模式类型 export type AuthMode = 'single' | 'double' // 单Token响应类型 export interface ISingleTokenRes { token: string expiresIn: number // 有效期(秒) } // 双Token响应类型 export interface IDoubleTokenRes { accessToken: string refreshToken: string // accessExpiresIn: number // 访问令牌有效期(秒) // refreshExpiresIn: number // 刷新令牌有效期(秒) expiresTime: number // 访问令牌过期时间,单位:毫秒 } /** * 登录返回的信息,其实就是 token 信息 */ export type IAuthLoginRes = ISingleTokenRes | IDoubleTokenRes /** * 用户信息 */ export interface IUserInfoRes { userId: number username: string nickname: string avatar?: string [key: string]: any // 允许其他扩展字段 } /** * 权限信息 */ export interface AuthPermissionInfo { user: IUserInfoRes roles: string[] permissions: string[] // menus: AppRouteRecordRaw[]; // add by 芋艿:暂时用不到 } // 认证存储数据结构 // TODO @芋艿:可以考虑删除 export interface AuthStorage { mode: AuthMode tokens: ISingleTokenRes | IDoubleTokenRes userInfo?: IUserInfoRes loginTime: number // 登录时间戳 } /** * 获取验证码 */ export interface ICaptcha { captchaEnabled: boolean uuid: string image: string } /** * 上传成功的信息 */ export interface IUploadSuccessInfo { fileId: number originalName: string fileName: string storagePath: string fileHash: string fileType: string fileBusinessType: string fileSize: number } /** * 更新用户信息 */ export interface IUpdateInfo { id: number name: string sex: string } /** * 更新用户信息 */ export interface IUpdatePassword { id: number oldPassword: string newPassword: string confirmPassword: string } /** * 判断是否为单Token响应 * @param tokenRes 登录响应数据 * @returns 是否为单Token响应 */ export function isSingleTokenRes(tokenRes: IAuthLoginRes): tokenRes is ISingleTokenRes { return 'token' in tokenRes && !('refreshToken' in tokenRes) } /** * 判断是否为双Token响应 * @param tokenRes 登录响应数据 * @returns 是否为双Token响应 */ export function isDoubleTokenRes(tokenRes: IAuthLoginRes): tokenRes is IDoubleTokenRes { return 'accessToken' in tokenRes && 'refreshToken' in tokenRes }