/** * 统一认证工具模块 * 整合所有认证检查、登录状态管理等功能 */ import { HTTP_CONFIG } from '../config/config.js' // ==================== 认证状态检查 ==================== /** * 检查用户是否已完成登录 * @returns {Boolean} 是否已完成登录 */ export function isUserLoggedIn() { const token = uni.getStorageSync(HTTP_CONFIG.storageKeys.token) const loginStep = uni.getStorageSync('loginStep') // 检查是否有有效的token和完成的登录流程 return !!(token && (loginStep === 'profile_completed' || loginStep === 'phone_authed')) } /** * 检查并验证token有效性 * @returns {Promise} token是否有效 */ export async function validateToken() { const token = uni.getStorageSync(HTTP_CONFIG.storageKeys.token) if (!token) { return false } try { // 调用一个简单的API来验证token const { getUserInfo } = await import('../api/profile.js') await getUserInfo({ custom: { loading: false, toast: false } }) return true } catch (error) { console.log('Token验证失败:', error) return false } } /** * 检查登录状态并处理 * @returns {boolean} 是否已登录 */ export function checkLoginStatus() { if (!isUserLoggedIn()) { console.log('用户未登录,跳转到登录页') navigateToLogin() return false } return true } // ==================== 认证数据管理 ==================== /** * 清理认证数据 */ export function clearAuthData() { console.log('清理认证数据被调用') uni.removeStorageSync(HTTP_CONFIG.storageKeys.token) uni.removeStorageSync(HTTP_CONFIG.storageKeys.refreshToken) uni.removeStorageSync(HTTP_CONFIG.storageKeys.userInfo) uni.removeStorageSync('loginStep') uni.removeStorageSync('wxLoginCode') uni.removeStorageSync('wxUserInfo') uni.removeStorageSync('loginDate') } /** * 清理登录流程中的临时数据 */ export function clearTempLoginData() { // 清理临时数据,保留重要的用户信息 uni.removeStorageSync('wxLoginCode') console.log('清理临时登录数据') } // ==================== 登录流程处理 ==================== /** * 跳转到登录页面 */ export function navigateToLogin() { uni.reLaunch({ url: HTTP_CONFIG.loginPage }) } /** * 处理需要鉴权的情况 */ export function handleAuthRequired() { const loginStep = uni.getStorageSync('loginStep') // 根据当前登录状态决定跳转页面 let targetPage = '/pages/login/login' let toastMessage = '请先登录' switch (loginStep) { case 'wx_logged': targetPage = '/pages/auth/phone-auth' toastMessage = '请完成手机号授权' break case 'phone_authed': case 'phone_skipped': targetPage = '/pages/profile/user-info?mode=setup' toastMessage = '请完善个人信息' break default: targetPage = '/pages/login/login' toastMessage = '请先登录' } // 显示提示并跳转 uni.showToast({ title: toastMessage, icon: 'none', duration: 1500 }) setTimeout(() => { uni.navigateTo({ url: targetPage }).catch(() => { uni.reLaunch({ url: targetPage }) }) }, 1500) } /** * 尝试自动登录 * @returns {Promise} 是否登录成功 */ export async function tryAutoLogin() { try { // 这里需要导入实际的自动登录函数 const { autoLogin } = await import('../../utils/loginState.js') return await autoLogin() } catch (error) { console.error('自动登录失败:', error) return false } }