Skip to content

useUserManager

管理用户信息的 Hook,基于 accessToken 自动拉取与持久化,配合 useTokenManager 使用。

前置依赖

依赖参数

参数名类型说明
env.vue.refRef<T> 工厂创建响应式引用
env.vue.computedComputed<T> 工厂创建计算属性
env.vue.watchEffect() => void监听 token 改变自动拉取/清空
env.vue.onMounted() => void初始化读入存储并按需拉取
env.vue.onUnmounted() => void预留清理
env.storage.getItemStorage['getItem']读取用户缓存
env.storage.setItemStorage['setItem']写入用户缓存
env.storage.removeItemStorage['removeItem']清除用户缓存

关联依赖(只读 Token)

参数名类型说明
token.accessToken`Ref<stringnull>`
token.isAuthenticatedRef<boolean>是否处于登录且有效

函数签名

typescript
interface UserProfile { id: string; name?: string; email?: string; avatarUrl?: string; [k: string]: any }

interface UseUserManagerOptions {
  storageKey?: string // 默认 'user:profile'
  fetchUserFn?: (accessToken: string) => Promise<UserProfile | null>
  autoFetch?: boolean // 默认 true
}

interface TokenReadonly {
  accessToken: Ref<string | null>
  isAuthenticated: Ref<boolean>
}

function useUserManager(
  token: TokenReadonly,
  options: UseUserManagerOptions,
  env: UseUserManagerEnvironment
): UseUserManagerReturn

返回值

属性名类型说明
user`Ref<UserProfilenull>`
isLoadingRef<boolean>是否加载中
error`Ref<stringnull>`
hasUserRef<boolean>是否存在用户数据
refreshUser() => Promise<boolean>主动拉取用户信息
clearUser() => void清空用户信息并持久化

工作原理

  1. 组件挂载时读取缓存(storageKey)。
  2. autoFetchtoken.isAuthenticated 为真,则调用 fetchUserFn(accessToken) 拉取。
  3. 监听 token 改变:有效则自动拉取,无效则清空用户。
  4. 所有变更持久化到存储。