/** * 用户认证和ID管理工具类 */ export default { /** * 智能获取用户ID(修复版) * @returns {number|null} 用户ID或null */ getUserId() { console.log('=== userAuth.getUserId 方法调用 ===') // 首先检查是否真的已登录(通过token和userInfo判断) const token = uni.getStorageSync('token') const userInfo = uni.getStorageSync('userInfo') const storedUserId = uni.getStorageSync('userId') console.log('userAuth 登录状态检查:') console.log('- token存在:', !!token) console.log('- userInfo存在:', !!userInfo) console.log('- storedUserId:', storedUserId) console.log('- userInfo内容:', userInfo) // 如果有token和userInfo,说明确实已登录 if (token && userInfo) { // 1. 优先从直接存储的userId获取(包括ID为1的情况) if (storedUserId !== null && storedUserId !== undefined && storedUserId !== '') { const finalUserId = parseInt(storedUserId) console.log('✅ userAuth已登录,从userId存储获取到用户ID:', finalUserId) return finalUserId } // 2. 从userInfo中获取 const userIdFromInfo = userInfo.userId || userInfo.id || userInfo.user_id if (userIdFromInfo !== null && userIdFromInfo !== undefined) { const finalUserId = parseInt(userIdFromInfo) console.log('✅ userAuth已登录,从userInfo获取到用户ID:', finalUserId) // 同步更新userId存储 uni.setStorageSync('userId', finalUserId) return finalUserId } // 3. 如果有登录信息但无法提取userId,使用默认值1 console.log('⚠️ userAuth有登录信息但无法提取userId,使用默认userId: 1') uni.setStorageSync('userId', 1) return 1 } // 4. 未登录状态 console.log('❌ userAuth未登录状态,返回null') return null }, /** * 检查用户是否已登录 * @returns {boolean} 是否已登录 */ isLoggedIn() { const token = uni.getStorageSync('token') const userInfo = uni.getStorageSync('userInfo') const userId = this.getUserId() // 修复:允许userId为1的用户(测试用户)也被认为是已登录状态 return !!(token && userInfo && userId) }, /** * 获取用户信息 * @returns {object|null} 用户信息对象或null */ getUserInfo() { return uni.getStorageSync('userInfo') || null }, /** * 获取用户token * @returns {string|null} token或null */ getToken() { return uni.getStorageSync('token') || null }, /** * 保存登录信息 * @param {string} token - 登录token * @param {object} userInfo - 用户信息 */ saveLoginInfo(token, userInfo) { console.log('=== userAuth.saveLoginInfo ===') console.log('token:', token) console.log('userInfo:', userInfo) // 保存token和用户信息 uni.setStorageSync('token', token) uni.setStorageSync('userInfo', userInfo) // 提取并保存用户ID - 支持多种字段名和数据类型 const userId = userInfo?.userId || userInfo?.id || userInfo?.user_id if (userId !== null && userId !== undefined) { // 确保userId是数字类型 const finalUserId = parseInt(userId) uni.setStorageSync('userId', finalUserId) console.log('✅ 登录信息保存成功') console.log('- 原始userId:', userId, '(类型:', typeof userId, ')') console.log('- 处理后userId:', finalUserId, '(类型:', typeof finalUserId, ')') } else { console.warn('⚠️ 用户信息中未找到userId字段') console.warn('userInfo keys:', Object.keys(userInfo || {})) } }, /** * 清除登录信息 */ clearLoginInfo() { uni.removeStorageSync('token') uni.removeStorageSync('userInfo') uni.removeStorageSync('userId') uni.removeStorageSync('rememberedAccount') console.log('登录信息已清除') }, /** * 检查并处理登录状态 * @param {object} options - 配置选项 * @param {boolean} options.requireLogin - 是否要求必须登录 * @param {boolean} options.allowTestUser - 是否允许使用测试用户(ID=1) * @param {string} options.redirectUrl - 登录后重定向的URL * @returns {Promise} 返回用户ID或null */ async checkLoginStatus(options = {}) { const { requireLogin = true, allowTestUser = false, redirectUrl = '' } = options const token = this.getToken() const userInfo = this.getUserInfo() const userId = this.getUserId() // 未登录情况 if (!token || !userInfo) { if (requireLogin) { return new Promise((resolve) => { uni.showModal({ title: '需要登录', content: '请先登录后继续使用', showCancel: !requireLogin, cancelText: '取消', confirmText: '去登录', success: (res) => { if (res.confirm) { const loginUrl = `/pages/page3/page3${redirectUrl ? '?redirect=' + encodeURIComponent(redirectUrl) : ''}` uni.navigateTo({ url: loginUrl }) } resolve(null) } }) }) } return null } // 登录信息异常情况 if (!userId || userId === 1) { if (allowTestUser && userId === 1) { console.log('允许使用测试用户') return 1 } return new Promise((resolve) => { uni.showModal({ title: '登录信息异常', content: '登录信息不完整,是否重新登录?', showCancel: allowTestUser, cancelText: '使用测试账号', confirmText: '重新登录', success: (res) => { if (res.confirm) { this.clearLoginInfo() const loginUrl = `/pages/page3/page3${redirectUrl ? '?redirect=' + encodeURIComponent(redirectUrl) : ''}` uni.navigateTo({ url: loginUrl }) resolve(null) } else if (allowTestUser) { console.log('用户选择使用测试账号') resolve(1) } else { resolve(null) } } }) }) } // 登录正常 return userId } }