useAuth.uts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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.reLaunch({
  61. url: '/pages/login/index'
  62. })
  63. }
  64. return {
  65. saveLoginInfo,
  66. getCurrentUserInfo,
  67. getCurrentAccessToken,
  68. isLoggedIn,
  69. logout
  70. }
  71. }