説明なし

login.ts 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. }
  15. /**
  16. * 登录返回的信息,其实就是 token 信息
  17. */
  18. export type IAuthLoginRes = ISingleTokenRes | IDoubleTokenRes
  19. /**
  20. * 用户信息
  21. */
  22. export interface IUserInfoRes {
  23. userId: number
  24. username: string
  25. nickname: string
  26. avatar?: string
  27. [key: string]: any // 允许其他扩展字段
  28. }
  29. // 认证存储数据结构
  30. export interface AuthStorage {
  31. mode: AuthMode
  32. tokens: ISingleTokenRes | IDoubleTokenRes
  33. userInfo?: IUserInfoRes
  34. loginTime: number // 登录时间戳
  35. }
  36. /**
  37. * 获取验证码
  38. */
  39. export interface ICaptcha {
  40. captchaEnabled: boolean
  41. uuid: string
  42. img: string
  43. }
  44. /**
  45. * 上传成功的信息
  46. */
  47. export interface IUploadSuccessInfo {
  48. fileId: number
  49. originalName: string
  50. fileName: string
  51. storagePath: string
  52. fileHash: string
  53. fileType: string
  54. fileBusinessType: string
  55. fileSize: number
  56. }
  57. /**
  58. * 更新用户信息
  59. */
  60. export interface IUpdateInfo {
  61. id: number
  62. name: string
  63. sex: string
  64. }
  65. /**
  66. * 更新用户信息
  67. */
  68. export interface IUpdatePassword {
  69. id: number
  70. oldPassword: string
  71. newPassword: string
  72. confirmPassword: string
  73. }
  74. /**
  75. * 判断是否为单Token响应
  76. * @param tokenRes 登录响应数据
  77. * @returns 是否为单Token响应
  78. */
  79. export function isSingleTokenRes(tokenRes: IAuthLoginRes | string): tokenRes is ISingleTokenRes {
  80. // 如果是字符串,不是单token对象
  81. if (typeof tokenRes === 'string') {
  82. return false
  83. }
  84. return 'token' in tokenRes && !('refreshToken' in tokenRes)
  85. }
  86. /**
  87. * 判断是否为双Token响应
  88. * @param tokenRes 登录响应数据
  89. * @returns 是否为双Token响应
  90. */
  91. export function isDoubleTokenRes(tokenRes: IAuthLoginRes | string): tokenRes is IDoubleTokenRes {
  92. // 如果是字符串,不是双token对象
  93. if (typeof tokenRes === 'string') {
  94. return false
  95. }
  96. return 'accessToken' in tokenRes && 'refreshToken' in tokenRes
  97. }