/** * 认证工具类 * 提供登录状态检查、token 管理等功能 */ import { AppServer } from '@/modules/api/AppServer' /** * 检查是否已登录 * @returns {Boolean} 是否已登录 */ export function isLoggedIn() { const token = uni.getStorageSync('token') return !!token } /** * 获取当前用户信息 * @returns {Object|null} 用户信息 */ export function getCurrentUser() { try { const userStr = uni.getStorageSync('user') if (userStr) { return JSON.parse(userStr) } } catch (e) { console.error('获取用户信息失败:', e) } return null } /** * 获取用户信息(别名) * @returns {Object|null} 用户信息 */ export function getUserInfo() { return getCurrentUser() } /** * 保存用户信息 * @param {Object} user - 用户信息 */ export function saveUserInfo(user) { try { if (user) { const userStr = JSON.stringify(user) uni.setStorageSync('user', userStr) // 更新全局数据 const app = getApp() if (app && app.globalData) { app.globalData.user = user } } } catch (error) { console.error('保存用户信息失败:', error) throw error } } /** * 获取 Token * @returns {String} Token */ export function getToken() { return uni.getStorageSync('token') || '' } /** * 保存认证信息 * @param {String} token - 访问令牌 * @param {String} refreshToken - 刷新令牌 * @param {Object} user - 用户信息 */ export function saveAuthData(token, refreshToken, user) { try { console.log('保存认证信息:', { token: token ? 'exists' : 'missing', refreshToken: refreshToken ? 'exists' : 'missing', user: user ? 'exists' : 'missing' }); // 保存到本地存储 if (token) { uni.setStorageSync('token', token) console.log('Token 已保存'); } if (refreshToken) { uni.setStorageSync('refreshToken', refreshToken) console.log('RefreshToken 已保存'); } if (user) { const userStr = JSON.stringify(user) uni.setStorageSync('user', userStr) console.log('用户信息已保存:', userStr); } // 更新全局数据 const app = getApp() if (app && app.globalData) { app.globalData.token = token app.globalData.user = user app.globalData.loginTime = Date.now() console.log('全局数据已更新'); } console.log('认证信息保存成功'); } catch (error) { console.error('保存认证信息失败:', error); throw error; } } /** * 清除认证信息 */ export function clearAuthData() { // 清除本地存储 uni.removeStorageSync('token') uni.removeStorageSync('refreshToken') uni.removeStorageSync('user') // 清除全局数据 const app = getApp() if (app && app.globalData) { app.globalData.token = '' app.globalData.user = null } } /** * 验证 Token 是否有效 * @returns {Promise} Token 是否有效 */ export async function validateToken() { if (!isLoggedIn()) { return false } try { const appServer = new AppServer() const result = await appServer.GetUserProfile() if (result.success) { // Token 有效,更新用户信息 saveAuthData(getToken(), uni.getStorageSync('refreshToken'), result.data) return true } else { // Token 无效 return false } } catch (error) { console.error('验证 Token 失败:', error) return false } } /** * 检查登录状态,如果未登录则跳转到登录页 * @param {Boolean} showToast - 是否显示提示 * @returns {Boolean} 是否已登录 */ export function requireAuth(showToast = true) { if (!isLoggedIn()) { if (showToast) { uni.showToast({ title: '请先登录', icon: 'none', duration: 1500 }) } setTimeout(() => { uni.navigateTo({ url: '/pages/login/login-page' }) }, showToast ? 1000 : 0) return false } return true } /** * 登出 */ export async function logout() { try { // 调用登出接口 const appServer = new AppServer() await appServer.Logout() } catch (error) { console.error('登出接口调用失败:', error) } finally { // 无论接口是否成功,都清除本地数据 clearAuthData() // 跳转到登录页 uni.reLaunch({ url: '/pages/login/login-page' }) } } /** * 刷新 Token * @returns {Promise} 是否刷新成功 */ export async function refreshToken() { const refreshToken = uni.getStorageSync('refreshToken') if (!refreshToken) { return false } try { const appServer = new AppServer() const result = await appServer.RefreshToken(refreshToken) if (result.success && result.data && result.data.token) { // 保存新的 token saveAuthData( 'Bearer ' + result.data.token, result.data.refreshToken || refreshToken, getCurrentUser() ) return true } else { return false } } catch (error) { console.error('刷新 Token 失败:', error) return false } } export default { isLoggedIn, getCurrentUser, getToken, saveAuthData, clearAuthData, validateToken, requireAuth, logout, refreshToken }