Codex Assistant
17 小时以前 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
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
const axios = require('axios');
 
const BASE_URL = 'http://localhost:8080';
 
async function testJwtWxOpenidFixed() {
    console.log('=== 测试修复后的JWT token和wxopenid处理 ===\n');
 
    try {
        // 1. 测试微信登录(匿名用户)
        console.log('1. 测试微信登录(匿名用户)...');
        const wxLoginResponse = await axios.post(`${BASE_URL}/api/auth/wx-login`, {
            code: 'test_code_' + Date.now(),
            wxOpenid: 'test_openid_' + Date.now(),
            wxUnionid: 'test_unionid_' + Date.now(),
            loginIp: '127.0.0.1',
            deviceInfo: 'test_device',
            phoneAuthorized: false
        });
 
        if (wxLoginResponse.data.success) {
            console.log('✅ 微信登录成功');
            console.log('- Token:', wxLoginResponse.data.token ? '已生成' : '未生成');
            console.log('- 用户类型:', wxLoginResponse.data.userInfo?.userType);
            
            const token = wxLoginResponse.data.token;
            
            // 2. 使用匿名用户token保存用户信息
            console.log('\n2. 使用匿名用户token保存用户信息...');
            const saveUserResponse = await axios.post(`${BASE_URL}/graphql`, {
                query: `
                    mutation SaveUserInfo($input: SaveUserInfoInput!) {
                        saveUserInfo(input: $input) {
                            success
                            message
                            user {
                                id
                                name
                                phone
                                wxOpenId
                                gender
                                birthday
                            }
                        }
                    }
                `,
                variables: {
                    input: {
                        name: '测试用户',
                        phone: '13800138000',
                        gender: 'MALE',
                        birthday: '1990-01-01'
                    }
                }
            }, {
                headers: {
                    'Authorization': `Bearer ${token}`,
                    'Content-Type': 'application/json'
                }
            });
 
            if (saveUserResponse.data.data?.saveUserInfo?.success) {
                console.log('✅ 保存用户信息成功');
                const user = saveUserResponse.data.data.saveUserInfo.user;
                console.log('- 用户ID:', user.id);
                console.log('- 姓名:', user.name);
                console.log('- 电话:', user.phone);
                console.log('- wxOpenId:', user.wxOpenId);
                console.log('- 性别:', user.gender);
                console.log('- 生日:', user.birthday);
                
                // 3. 验证wxopenid是否正确记录
                if (user.wxOpenId) {
                    console.log('✅ wxopenid已正确记录到数据库');
                } else {
                    console.log('❌ wxopenid未记录到数据库');
                }
                
                // 4. 再次保存相同电话号码的用户信息(测试更新逻辑)
                console.log('\n3. 测试重复保存(更新现有用户)...');
                const updateUserResponse = await axios.post(`${BASE_URL}/graphql`, {
                    query: `
                        mutation SaveUserInfo($input: SaveUserInfoInput!) {
                            saveUserInfo(input: $input) {
                                success
                                message
                                user {
                                    id
                                    name
                                    phone
                                    wxOpenId
                                    gender
                                    birthday
                                }
                            }
                        }
                    `,
                    variables: {
                        input: {
                            name: '测试用户(更新)',
                            phone: '13800138000',
                            gender: 'FEMALE',
                            birthday: '1991-02-02'
                        }
                    }
                }, {
                    headers: {
                        'Authorization': `Bearer ${token}`,
                        'Content-Type': 'application/json'
                    }
                });
 
                if (updateUserResponse.data.data?.saveUserInfo?.success) {
                    console.log('✅ 更新用户信息成功');
                    const updatedUser = updateUserResponse.data.data.saveUserInfo.user;
                    console.log('- 用户ID:', updatedUser.id);
                    console.log('- 姓名:', updatedUser.name);
                    console.log('- 电话:', updatedUser.phone);
                    console.log('- wxOpenId:', updatedUser.wxOpenId);
                    console.log('- 性别:', updatedUser.gender);
                    console.log('- 生日:', updatedUser.birthday);
                    
                    // 验证是否为同一用户(ID应该相同)
                    if (user.id === updatedUser.id) {
                        console.log('✅ 正确更新了现有用户,未创建新用户');
                    } else {
                        console.log('❌ 错误地创建了新用户,应该更新现有用户');
                    }
                    
                    // 验证wxopenid是否保持一致
                    if (user.wxOpenId === updatedUser.wxOpenId) {
                        console.log('✅ wxopenid保持一致');
                    } else {
                        console.log('❌ wxopenid发生了变化');
                    }
                } else {
                    console.log('❌ 更新用户信息失败');
                    console.log('错误:', updateUserResponse.data.errors || updateUserResponse.data.data?.saveUserInfo?.message);
                }
                
            } else {
                console.log('❌ 保存用户信息失败');
                console.log('错误:', saveUserResponse.data.errors || saveUserResponse.data.data?.saveUserInfo?.message);
            }
            
        } else {
            console.log('❌ 微信登录失败');
            console.log('错误:', wxLoginResponse.data.message);
        }
 
    } catch (error) {
        console.error('❌ 测试过程中发生错误:', error.response?.data || error.message);
    }
}
 
// 运行测试
testJwtWxOpenidFixed();