lrj
21 小时以前 9f8395fab13ca4b230a0f7d62636e209745c91d4
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
const axios = require('axios');
 
console.log('=== 测试sessionKey修复效果 ===');
 
async function testSessionKeyFix() {
  try {
    // 1. 测试后端wxLogin接口
    console.log('\n1. 测试后端wxLogin接口...');
    const loginResponse = await axios.post('http://localhost:8080/api/graphql', {
      query: `
        mutation {
          wxLogin(input: {
            code: "test_code_${Date.now()}",
            loginIp: "192.168.1.100",
            deviceInfo: "Test Device - sessionKey Fix Test"
          }) {
            token
            userInfo {
              userId
              name
              phone
            }
            isNewUser
            loginRecordId
            sessionKey
          }
        }
      `
    }, {
      headers: {
        'Content-Type': 'application/json'
      }
    });
 
    if (loginResponse.status === 200 && loginResponse.data.data && loginResponse.data.data.wxLogin) {
      const loginResult = loginResponse.data.data.wxLogin;
      console.log('✅ 后端wxLogin接口正常');
      console.log('- Token长度:', loginResult.token ? loginResult.token.length : 0);
      console.log('- SessionKey存在:', !!loginResult.sessionKey);
      console.log('- SessionKey长度:', loginResult.sessionKey ? loginResult.sessionKey.length : 0);
      
      // 2. 模拟小程序端存储逻辑
      console.log('\n2. 模拟小程序端存储逻辑...');
      const mockStorage = {};
      const mockGlobalData = {
        userInfo: null,
        token: null,
        sessionKey: null // 这是我们修复的关键点
      };
      
      // 模拟wx.setStorageSync
      function mockSetStorageSync(key, value) {
        mockStorage[key] = value;
        console.log(`存储 ${key}:`, typeof value === 'string' ? `${value.substring(0, 10)}...` : value);
      }
      
      // 模拟wx.getStorageSync
      function mockGetStorageSync(key) {
        return mockStorage[key];
      }
      
      // 模拟登录成功后的存储逻辑
      mockSetStorageSync('token', loginResult.token);
      mockSetStorageSync('userInfo', loginResult.userInfo);
      if (loginResult.sessionKey) {
        mockSetStorageSync('sessionKey', loginResult.sessionKey);
      }
      
      // 模拟设置globalData
      mockGlobalData.token = loginResult.token;
      mockGlobalData.userInfo = loginResult.userInfo;
      mockGlobalData.sessionKey = loginResult.sessionKey;
      
      console.log('✅ 存储逻辑完成');
      
      // 3. 模拟checkLoginStatus逻辑
      console.log('\n3. 模拟checkLoginStatus逻辑...');
      const storedToken = mockGetStorageSync('token');
      const storedUserInfo = mockGetStorageSync('userInfo');
      const storedSessionKey = mockGetStorageSync('sessionKey');
      
      console.log('从存储中读取:');
      console.log('- Token存在:', !!storedToken);
      console.log('- UserInfo存在:', !!storedUserInfo);
      console.log('- SessionKey存在:', !!storedSessionKey);
      console.log('- SessionKey长度:', storedSessionKey ? storedSessionKey.length : 0);
      
      if (storedToken && storedUserInfo) {
        mockGlobalData.token = storedToken;
        mockGlobalData.userInfo = storedUserInfo;
        mockGlobalData.sessionKey = storedSessionKey;
        console.log('✅ 登录状态恢复成功');
      }
      
      // 4. 模拟手机号解密检查
      console.log('\n4. 模拟手机号解密检查...');
      console.log('globalData.sessionKey存在:', !!mockGlobalData.sessionKey);
      console.log('globalData.sessionKey长度:', mockGlobalData.sessionKey ? mockGlobalData.sessionKey.length : 0);
      
      if (!mockGlobalData.sessionKey) {
        console.log('❌ sessionKey为空,无法解密手机号');
        return false;
      } else {
        console.log('✅ sessionKey正常,可以进行手机号解密');
        return true;
      }
      
    } else {
      console.log('❌ 后端wxLogin接口异常');
      console.log('响应:', loginResponse.data);
      return false;
    }
    
  } catch (error) {
    console.error('❌ 测试过程中发生错误:', error.message);
    if (error.response) {
      console.error('响应状态:', error.response.status);
      console.error('响应数据:', error.response.data);
    }
    return false;
  }
}
 
// 运行测试
testSessionKeyFix().then(success => {
  if (success) {
    console.log('\n🎉 sessionKey修复验证成功!');
    console.log('现在小程序端应该能够正常获取和使用sessionKey进行手机号解密了。');
  } else {
    console.log('\n❌ sessionKey修复验证失败,需要进一步检查。');
  }
}).catch(err => {
  console.error('测试执行失败:', err);
});