Skip to content

useTokenManager

Access / Refresh Token 的持久化、自动刷新与登录态计算(Vue Hook,依赖注入)。

前置依赖

依赖参数

参数名类型说明
env.vue.refVue ref响应式状态
env.vue.computedVue computed派生 isAuthenticated
env.vue.watchEffectVue watchEffect持久化同步
env.vue.onMounted / onUnmounted生命周期水合与定时器清理
env.host.setTimeout / clearTimeout定时器到期前刷新调度
env.host.now() => number当前时间戳(毫秒)
env.storageuseStorage 实例Promise 存储 API

存储须通过 useStorage 与适配器创建,勿直接使用 localStorage

环境要求

  • Vue 3:运行时经 env.vue 注入
  • 持久化useLocalStorage 或 IndexedDB 适配器

函数签名

typescript
function useTokenManager(
  options: UseTokenManagerOptions,
  env: UseTokenManagerEnvironment,
): UseTokenManagerReturn

interface UseTokenManagerOptions {
  refreshThresholdMs?: number
  storageKeys?: { access?: string; refresh?: string; expiresAt?: string }
  refreshFn?: (refreshToken: string) => Promise<{
    accessToken: string
    refreshToken?: string
    expiresAt: number
  } | null>
}

interface SetTokensInput {
  accessToken: string
  refreshToken?: string | null
  expiresAt?: number | null
  expiresInSeconds?: number | null
}

参数

参数名类型必填说明
options.refreshThresholdMsnumber到期前刷新阈值,默认 60000
options.refreshFnfunction刷新接口;无则仅本地管理
options.storageKeysobject默认 token:access
envUseTokenManagerEnvironmentVue + host + storage

返回值

字段类型说明
accessToken / refreshToken / expiresAtRef令牌与绝对过期时间
isAuthenticatedRef<boolean>有 access 且未过期
isRefreshing / errorRef刷新状态
setTokensfunction登录成功后写入
clearTokensfunction登出清理
forceRefreshfunction手动刷新

工作原理

  1. onMounted 从 storage 水合三键值,再 scheduleRefresh
  2. setTokens 写入 Ref 并 persist;按 expiresAt - now - threshold 设定刷新定时器。
  3. forceRefresh 调用 refreshFn,成功则 setTokens 更新。
  4. watchEffect 在水合完成后把 Ref 变更写回 storage。
  5. clearTokens 取消定时器并 remove 存储键。

异常

刷新失败写入 error Ref,不向外抛异常。