auth.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { Storage } from "./storage";
  2. import { AUTH_KEYS } from "@/constants";
  3. /**
  4. * 身份验证工具类
  5. * 集中管理所有与认证相关的功能,包括:
  6. * - 登录状态判断
  7. * - Token 的存取
  8. * - 记住我功能的状态管理
  9. */
  10. export class Auth {
  11. /**
  12. * 判断用户是否已登录
  13. * @returns 是否已登录
  14. */
  15. static isLoggedIn(): boolean {
  16. return !!Auth.getAccessToken();
  17. }
  18. /**
  19. * 获取当前有效的访问令牌
  20. * 会根据"记住我"状态从适当的存储位置获取
  21. * @returns 当前有效的访问令牌
  22. */
  23. static getAccessToken(): string {
  24. const isRememberMe = Storage.get<boolean>(AUTH_KEYS.REMEMBER_ME, false);
  25. // 根据"记住我"状态决定从哪个存储位置获取token
  26. return isRememberMe
  27. ? Storage.get(AUTH_KEYS.ACCESS_TOKEN, "")
  28. : Storage.sessionGet(AUTH_KEYS.ACCESS_TOKEN, "");
  29. }
  30. /**
  31. * 获取刷新令牌
  32. * @returns 当前有效的刷新令牌
  33. */
  34. static getRefreshToken(): string {
  35. const isRememberMe = Storage.get<boolean>(AUTH_KEYS.REMEMBER_ME, false);
  36. return isRememberMe
  37. ? Storage.get(AUTH_KEYS.REFRESH_TOKEN, "")
  38. : Storage.sessionGet(AUTH_KEYS.REFRESH_TOKEN, "");
  39. }
  40. /**
  41. * 设置访问令牌和刷新令牌
  42. * @param accessToken 访问令牌
  43. * @param refreshToken 刷新令牌
  44. * @param rememberMe 是否记住我
  45. */
  46. static setTokens(accessToken: string, refreshToken: string, rememberMe: boolean): void {
  47. // 保存"记住我"状态
  48. Storage.set(AUTH_KEYS.REMEMBER_ME, rememberMe);
  49. if (rememberMe) {
  50. // 使用localStorage长期保存
  51. Storage.set(AUTH_KEYS.ACCESS_TOKEN, accessToken);
  52. Storage.set(AUTH_KEYS.REFRESH_TOKEN, refreshToken);
  53. } else {
  54. // 使用sessionStorage临时保存
  55. Storage.sessionSet(AUTH_KEYS.ACCESS_TOKEN, accessToken);
  56. Storage.sessionSet(AUTH_KEYS.REFRESH_TOKEN, refreshToken);
  57. // 清除localStorage中可能存在的token
  58. Storage.remove(AUTH_KEYS.ACCESS_TOKEN);
  59. Storage.remove(AUTH_KEYS.REFRESH_TOKEN);
  60. }
  61. }
  62. /**
  63. * 清除所有身份验证相关的数据
  64. */
  65. static clearAuth(): void {
  66. Storage.remove(AUTH_KEYS.ACCESS_TOKEN);
  67. Storage.remove(AUTH_KEYS.REFRESH_TOKEN);
  68. Storage.sessionRemove(AUTH_KEYS.ACCESS_TOKEN);
  69. Storage.sessionRemove(AUTH_KEYS.REFRESH_TOKEN);
  70. // 不清除记住我设置,保留用户偏好
  71. }
  72. /**
  73. * 获取"记住我"状态
  74. * @returns 是否记住我
  75. */
  76. static getRememberMe(): boolean {
  77. return Storage.get<boolean>(AUTH_KEYS.REMEMBER_ME, false);
  78. }
  79. }