useUserManager
管理用户信息的 Hook,基于 accessToken 自动拉取与持久化,配合 useTokenManager 使用。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
env.vue.ref | Ref<T> 工厂 | 创建响应式引用 |
env.vue.computed | Computed<T> 工厂 | 创建计算属性 |
env.vue.watchEffect | () => void | 监听 token 改变自动拉取/清空 |
env.vue.onMounted | () => void | 初始化读入存储并按需拉取 |
env.vue.onUnmounted | () => void | 预留清理 |
env.storage.getItem | Storage['getItem'] | 读取用户缓存 |
env.storage.setItem | Storage['setItem'] | 写入用户缓存 |
env.storage.removeItem | Storage['removeItem'] | 清除用户缓存 |
关联依赖(只读 Token)
| 参数名 | 类型 | 说明 |
|---|---|---|
token.accessToken | `Ref<string | null>` |
token.isAuthenticated | Ref<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<UserProfile | null>` |
isLoading | Ref<boolean> | 是否加载中 |
error | `Ref<string | null>` |
hasUser | Ref<boolean> | 是否存在用户数据 |
refreshUser | () => Promise<boolean> | 主动拉取用户信息 |
clearUser | () => void | 清空用户信息并持久化 |
工作原理
- 组件挂载时读取缓存(
storageKey)。 - 若
autoFetch且token.isAuthenticated为真,则调用fetchUserFn(accessToken)拉取。 - 监听 token 改变:有效则自动拉取,无效则清空用户。
- 所有变更持久化到存储。