login.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // 认证模式类型
  2. export type AuthMode = 'single' | 'double'
  3. // 单Token响应类型
  4. export interface ISingleTokenRes {
  5. token: string
  6. expiresIn: number // 有效期(秒)
  7. }
  8. // 双Token响应类型
  9. export interface IDoubleTokenRes {
  10. accessToken: string
  11. refreshToken: string
  12. // accessExpiresIn: number // 访问令牌有效期(秒)
  13. // refreshExpiresIn: number // 刷新令牌有效期(秒)
  14. expiresTime: number // 访问令牌过期时间,单位:毫秒
  15. }
  16. /**
  17. * 登录返回的信息,其实就是 token 信息
  18. */
  19. export type IAuthLoginRes = ISingleTokenRes | IDoubleTokenRes
  20. /**
  21. * 用户信息
  22. */
  23. export interface IUserInfoRes {
  24. userId: number
  25. username: string
  26. nickname: string
  27. avatar?: string
  28. [key: string]: any // 允许其他扩展字段
  29. }
  30. /**
  31. * 权限信息
  32. */
  33. export interface AuthPermissionInfo {
  34. user: IUserInfoRes
  35. roles: string[]
  36. permissions: string[]
  37. // menus: AppRouteRecordRaw[]; // add by 芋艿:暂时用不到
  38. }
  39. // 认证存储数据结构
  40. // TODO @芋艿:可以考虑删除
  41. export interface AuthStorage {
  42. mode: AuthMode
  43. tokens: ISingleTokenRes | IDoubleTokenRes
  44. userInfo?: IUserInfoRes
  45. loginTime: number // 登录时间戳
  46. }
  47. /**
  48. * 获取验证码
  49. */
  50. export interface ICaptcha {
  51. captchaEnabled: boolean
  52. uuid: string
  53. image: string
  54. }
  55. /**
  56. * 上传成功的信息
  57. */
  58. export interface IUploadSuccessInfo {
  59. fileId: number
  60. originalName: string
  61. fileName: string
  62. storagePath: string
  63. fileHash: string
  64. fileType: string
  65. fileBusinessType: string
  66. fileSize: number
  67. }
  68. /**
  69. * 更新用户信息
  70. */
  71. export interface IUpdateInfo {
  72. id: number
  73. name: string
  74. sex: string
  75. }
  76. /**
  77. * 更新用户信息
  78. */
  79. export interface IUpdatePassword {
  80. id: number
  81. oldPassword: string
  82. newPassword: string
  83. confirmPassword: string
  84. }
  85. /**
  86. * 判断是否为单Token响应
  87. * @param tokenRes 登录响应数据
  88. * @returns 是否为单Token响应
  89. */
  90. export function isSingleTokenRes(tokenRes: IAuthLoginRes): tokenRes is ISingleTokenRes {
  91. return 'token' in tokenRes && !('refreshToken' in tokenRes)
  92. }
  93. /**
  94. * 判断是否为双Token响应
  95. * @param tokenRes 登录响应数据
  96. * @returns 是否为双Token响应
  97. */
  98. export function isDoubleTokenRes(tokenRes: IAuthLoginRes): tokenRes is IDoubleTokenRes {
  99. return 'accessToken' in tokenRes && 'refreshToken' in tokenRes
  100. }