// 测试小程序登录状态的脚本 // 这个脚本模拟小程序的登录状态检查 const jwt = require('jsonwebtoken'); console.log('=== 小程序登录状态检查 ==='); // 模拟从小程序存储中获取的token(这里需要你提供实际的token) // 你可以在小程序开发者工具的控制台中运行以下代码获取token: // console.log('当前token:', wx.getStorageSync('token')) const testToken = 'YOUR_TOKEN_HERE'; // 请替换为实际的token function checkTokenStatus(token) { console.log('\n--- Token状态检查 ---'); if (!token || token === 'YOUR_TOKEN_HERE') { console.log('❌ 没有提供有效的token'); console.log('💡 请在小程序开发者工具控制台运行: console.log("当前token:", wx.getStorageSync("token"))'); return false; } console.log('Token存在:', !!token); console.log('Token长度:', token.length); console.log('Token前20字符:', token.substring(0, 20) + '...'); // 检查JWT格式 const parts = token.split('.'); if (parts.length !== 3) { console.log('❌ Token格式无效(不是标准JWT格式)'); return false; } try { // 解析JWT payload(不验证签名) const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString()); console.log('Token payload:', { userId: payload.userId, phone: payload.phone, exp: payload.exp, iat: payload.iat }); // 检查是否过期 const now = Math.floor(Date.now() / 1000); const isExpired = payload.exp <= now; console.log('Token过期时间:', new Date(payload.exp * 1000).toLocaleString()); console.log('当前时间:', new Date(now * 1000).toLocaleString()); console.log('Token是否过期:', isExpired); if (isExpired) { console.log('❌ Token已过期'); return false; } console.log('✅ Token有效'); return true; } catch (error) { console.log('❌ Token解析失败:', error.message); return false; } } // 模拟GraphQL请求测试 function simulateGraphQLRequest(token) { console.log('\n--- 模拟GraphQL请求 ---'); const headers = { 'Content-Type': 'application/json', 'Authorization': token ? `Bearer ${token}` : '' }; console.log('请求头:', headers); if (!token) { console.log('❌ 没有Authorization头,后端会认为用户未登录'); return false; } console.log('✅ 有Authorization头,后端会尝试验证token'); return true; } // 执行检查 const isTokenValid = checkTokenStatus(testToken); const hasAuthHeader = simulateGraphQLRequest(testToken); console.log('\n=== 总结 ==='); console.log('Token有效:', isTokenValid); console.log('有认证头:', hasAuthHeader); if (!isTokenValid || !hasAuthHeader) { console.log('\n🔧 解决方案:'); console.log('1. 检查小程序是否正确登录'); console.log('2. 检查token是否正确保存到本地存储'); console.log('3. 检查token是否过期'); console.log('4. 如果token无效,需要重新登录'); console.log('\n📱 小程序调试步骤:'); console.log('1. 在小程序开发者工具中打开控制台'); console.log('2. 运行: console.log("token:", wx.getStorageSync("token"))'); console.log('3. 运行: console.log("userInfo:", wx.getStorageSync("userInfo"))'); console.log('4. 运行: console.log("globalData:", getApp().globalData)'); console.log('5. 如果token为空或无效,尝试重新启动小程序或清除存储重新登录'); }