useAuth.uts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * 认证相关组合式函数
  3. */
  4. import {
  5. saveAccessToken,
  6. getAccessToken,
  7. clearAccessToken,
  8. saveUserInfo,
  9. getUserInfo,
  10. clearUserInfo,
  11. clearAll
  12. } from '../utils/storage'
  13. import type { UserInfo } from '../types/user'
  14. // 定义返回类型
  15. type AuthComposable = {
  16. saveLoginInfo: (accessToken: string, userInfo: UTSJSONObject) => void
  17. getCurrentUserInfo: () => UTSJSONObject | null
  18. getCurrentAccessToken: () => string | null
  19. isLoggedIn: () => boolean
  20. logout: () => void
  21. }
  22. /**
  23. * 认证管理
  24. */
  25. export const useAuth = (): AuthComposable => {
  26. /**
  27. * 保存登录信息
  28. */
  29. const saveLoginInfo = (accessToken: string, userInfo: UTSJSONObject): void => {
  30. saveAccessToken(accessToken)
  31. saveUserInfo(userInfo)
  32. }
  33. /**
  34. * 获取当前用户信息
  35. */
  36. const getCurrentUserInfo = (): UTSJSONObject | null => {
  37. return getUserInfo()
  38. }
  39. /**
  40. * 获取当前 AccessToken
  41. */
  42. const getCurrentAccessToken = (): string | null => {
  43. return getAccessToken()
  44. }
  45. /**
  46. * 检查是否已登录
  47. */
  48. const isLoggedIn = (): boolean => {
  49. const token = getAccessToken()
  50. return token != null && token.length > 0
  51. }
  52. /**
  53. * 退出登录
  54. */
  55. const logout = (): void => {
  56. clearAll()
  57. // 设置退出标志,防止自动登录
  58. uni.setStorageSync('isLogout', true)
  59. // 触发登录状态变化事件
  60. uni.$emit('onAuthStateChange', { isLoggedIn: false })
  61. // 跳转登录页
  62. uni.reLaunch({
  63. url: '/pages/login/index'
  64. })
  65. }
  66. return {
  67. saveLoginInfo,
  68. getCurrentUserInfo,
  69. getCurrentAccessToken,
  70. isLoggedIn,
  71. logout
  72. }
  73. }