/** * 认证工具函数 * 提供登录状态检查、token管理等功能 */ import { logger } from './logger'; /** * 获取本地存储的token */ export const getToken = (): string => { const token = uni.getStorageSync('accessToken'); logger.log('[Auth] 获取token:', token ? '存在(长度:' + token.length + ')' : '不存在'); return token || ''; }; /** * 保存token到本地存储 */ export const setToken = (token: string): void => { logger.log('[Auth] 保存token:', token ? '有效(长度:' + token.length + ')' : '无效'); uni.setStorageSync('accessToken', token); // 验证保存是否成功 const saved = uni.getStorageSync('accessToken'); logger.log('[Auth] 保存后验证:', saved === token ? '成功' : '失败'); }; /** * 清除本地存储的token */ export const removeToken = (): void => { uni.removeStorageSync('accessToken'); }; /** * 检查是否已登录 */ export const isLoggedIn = (): boolean => { return !!getToken(); }; /** * 获取用户信息 */ export const getUserInfo = (): any => { return uni.getStorageSync('haha-user-info') || null; }; /** * 保存用户信息 */ export const setUserInfo = (userInfo: any): void => { uni.setStorageSync('haha-user-info', userInfo); }; /** * 清除用户信息 */ export const removeUserInfo = (): void => { uni.removeStorageSync('haha-user-info'); }; /** * 清除所有登录信息及会话数据 */ export const clearAuth = (): void => { removeToken(); removeUserInfo(); // 清除购物流程相关数据 uni.removeStorageSync('currentDeviceId'); uni.removeStorageSync('currentOutTradeNo'); uni.removeStorageSync('currentOrderNo'); uni.removeStorageSync('shoppingPollingActive'); }; /** * 路由守卫:检查登录状态 * 如果未登录,则跳转到登录页 * @param redirectUrl 登录后要跳转的页面(可选) * @returns 是否已登录 */ export const checkAuth = (redirectUrl?: string): boolean => { if (!isLoggedIn()) { // 构建登录页URL,带上redirect参数 let loginUrl = '/pages/login/login'; if (redirectUrl) { loginUrl += `?redirect=${encodeURIComponent(redirectUrl)}`; } uni.reLaunch({ url: loginUrl }); return false; } return true; }; /** * 全局401未授权处理 * 清除所有登录信息并跳转到登录页 * 任何接口遇到401时都应调用此函数 */ export const handleUnauthorized = (): void => { logger.log('[Auth] token无效或已过期,清除登录信息并跳转登录页'); clearAuth(); uni.reLaunch({ url: '/pages/login/login' }); }; /** * 退出登录 */ export const logout = (): void => { clearAuth(); uni.reLaunch({ url: '/pages/login/login' }); };