// 测试小程序登录状态的脚本
|
// 这个脚本模拟小程序的登录状态检查
|
|
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为空或无效,尝试重新启动小程序或清除存储重新登录');
|
}
|