import Taro from '@tarojs/taro' const TOKEN_KEY = 'access_token' const REFRESH_TOKEN_KEY = 'refresh_token' const TOKEN_EXPIRES_KEY = 'token_expires' export interface TokenInfo { accessToken: string refreshToken?: string expiresAt?: number } class TokenManager { // 获取访问令牌 getAccessToken(): string | null { try { return Taro.getStorageSync(TOKEN_KEY) } catch (error) { console.warn('获取访问令牌失败:', error) return null } } // 获取刷新令牌 getRefreshToken(): string | null { try { return Taro.getStorageSync(REFRESH_TOKEN_KEY) } catch (error) { console.warn('获取刷新令牌失败:', error) return null } } // 获取令牌过期时间 getTokenExpires(): number | null { try { return Taro.getStorageSync(TOKEN_EXPIRES_KEY) } catch (error) { console.warn('获取令牌过期时间失败:', error) return null } } // 设置令牌信息 setToken(tokenInfo: TokenInfo): void { try { Taro.setStorageSync(TOKEN_KEY, tokenInfo.accessToken) if (tokenInfo.refreshToken) { Taro.setStorageSync(REFRESH_TOKEN_KEY, tokenInfo.refreshToken) } if (tokenInfo.expiresAt) { Taro.setStorageSync(TOKEN_EXPIRES_KEY, tokenInfo.expiresAt) } } catch (error) { console.warn('设置令牌失败:', error) } } // 清除所有令牌 clearTokens(): void { try { Taro.removeStorageSync(TOKEN_KEY) Taro.removeStorageSync(REFRESH_TOKEN_KEY) Taro.removeStorageSync(TOKEN_EXPIRES_KEY) } catch (error) { console.warn('清除令牌失败:', error) } } // 检查令牌是否过期 isTokenExpired(): boolean { const expiresAt = this.getTokenExpires() if (!expiresAt) { return false // 如果没有过期时间,假设未过期 } return Date.now() >= expiresAt } // 检查是否有有效令牌 hasValidToken(): boolean { const token = this.getAccessToken() return !!token && !this.isTokenExpired() } // 获取令牌剩余有效时间(毫秒) getTokenRemainingTime(): number { const expiresAt = this.getTokenExpires() if (!expiresAt) { return 0 // 如果没有过期时间,返回0 } const remaining = expiresAt - Date.now() return remaining > 0 ? remaining : 0 } // 获取Authorization头 getAuthHeader(): Record { const token = this.getAccessToken() if (!token) { return {} } return { 'applet-token': `${token}` } } } // 导出单例实例 export default new TokenManager()