auth.ts
1.15 KB
import { useStorage } from '@vueuse/core'
/**
* 登录态缓存
*
* 单独抽成模块(而不是放 store 里)的原因:request.ts 需要读取 token,
* 而 store 又依赖 request.ts,直接互相 import 会形成循环依赖。
* useStorage 自带 localStorage 持久化与响应式,刷新页面不掉登录态。
*/
export const accessToken = useStorage<string>('ACCESS_TOKEN', '')
export const refreshToken = useStorage<string>('REFRESH_TOKEN', '')
export const expireTime = useStorage<number>('ACCESS_TOKEN_EXPIRE_TIME', 0)
export function getAccessToken(): string {
return accessToken.value
}
export function setToken(token: string, refresh: string, expires: number) {
accessToken.value = token || ''
refreshToken.value = refresh || ''
expireTime.value = expires || 0
}
export function clearToken() {
accessToken.value = ''
refreshToken.value = ''
expireTime.value = 0
}
/** token 是否已过期(提前 30 秒视为过期,避免边界请求被打回) */
export function isTokenExpired(): boolean {
if (!accessToken.value) return true
if (!expireTime.value) return false
return Date.now() >= expireTime.value - 30 * 1000
}