Codex Assistant
昨天 58d9f460b2f8c34430285115e2557d18333c5cab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// 测试小程序登录状态的脚本
// 这个脚本模拟小程序的登录状态检查
 
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为空或无效,尝试重新启动小程序或清除存储重新登录');
}