| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /**
- * 认证工具函数
- * 提供登录状态检查、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'
- });
- };
|