const axios = require('axios'); // 配置 const BASE_URL = 'http://localhost:8080/api'; // 获取新的微信登录token async function getNewWxToken() { console.log('=== 获取新的微信登录token ==='); try { // 使用GraphQL mutation进行微信登录 const wxLoginMutation = ` mutation WxLogin($input: WxLoginRequest!) { wxLogin(input: $input) { token userInfo { userId name phone userType } success message hasJudge } } `; // 需要一个新的微信code const wxCode = 'NEED_NEW_WX_CODE_HERE'; // 请替换为新的微信code if (wxCode === 'NEED_NEW_WX_CODE_HERE') { console.log('❌ 请先替换脚本中的微信code'); return null; } const response = await axios.post(`${BASE_URL}/graphql`, { query: wxLoginMutation, variables: { input: { code: wxCode, wxOpenid: "ogxxA1-KrSVTdqI9T1uaB1BQwPGU", // 使用已知的openid loginIp: "127.0.0.1", deviceInfo: "test-device", phoneAuthorized: false } } }); if (response.data.errors) { console.log('❌ 微信登录失败:', response.data.errors); return null; } const loginData = response.data.data.wxLogin; console.log('✅ 微信登录成功:'); console.log('- Token:', loginData.token ? '已生成' : '未生成'); console.log('- 用户ID:', loginData.userInfo?.userId); console.log('- 用户名:', loginData.userInfo?.name); console.log('- 用户类型:', loginData.userInfo?.userType); console.log('- 是否有评委权限:', loginData.hasJudge); return loginData.token; } catch (error) { console.error('❌ 微信登录失败:', error.response?.data || error.message); return null; } } // 使用已知的token进行测试 async function testWithKnownToken() { console.log('\n=== 使用已知token测试 ==='); // 这里使用一个已知的token(用户需要提供) const knownToken = 'PASTE_YOUR_VALID_TOKEN_HERE'; if (knownToken === 'PASTE_YOUR_VALID_TOKEN_HERE') { console.log('❌ 请先替换脚本中的token'); return; } await debugUserContext(knownToken); } // 调试用户上下文 async function debugUserContext(token) { console.log('\n=== 调试用户上下文 ==='); // 1. 测试获取当前用户信息 console.log('1. 测试获取当前用户信息:'); try { const userQuery = ` query GetCurrentUser { currentUser { id name phone } } `; const response = await axios.post(`${BASE_URL}/graphql`, { query: userQuery }, { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); if (response.data.errors) { console.log('❌ 获取当前用户失败:', response.data.errors); } else if (response.data.data?.currentUser) { const user = response.data.data.currentUser; console.log('✅ 当前用户信息:'); console.log(` 用户ID: ${user.id}`); console.log(` 姓名: ${user.name}`); console.log(` 手机号: ${user.phone}`); } else { console.log('⚠️ 无法获取当前用户信息'); } } catch (error) { console.log('❌ 获取当前用户失败:', error.response?.data || error.message); } // 2. 测试获取当前评委信息 console.log('\n2. 测试获取当前评委信息:'); try { const judgeQuery = ` query GetCurrentJudge { currentJudgeInfo { judgeId judgeName title company } } `; const response = await axios.post(`${BASE_URL}/graphql`, { query: judgeQuery }, { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); if (response.data.errors) { console.log('❌ 获取当前评委失败:', response.data.errors); } else if (response.data.data?.currentJudgeInfo) { const judge = response.data.data.currentJudgeInfo; console.log('✅ 当前评委信息:'); console.log(` 评委ID: ${judge.judgeId}`); console.log(` 评委名: ${judge.judgeName}`); console.log(` 职位: ${judge.title}`); console.log(` 公司: ${judge.company}`); } else { console.log('⚠️ 无法获取当前评委信息(可能不是评委)'); } } catch (error) { console.log('❌ 获取当前评委失败:', error.response?.data || error.message); } // 3. 测试评审统计查询 console.log('\n3. 测试评审统计查询:'); try { const statsQuery = ` query GetReviewStats { reviewStatistics { unReviewedCount reviewedCount studentUnReviewedCount } } `; const response = await axios.post(`${BASE_URL}/graphql`, { query: statsQuery }, { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); if (response.data.errors) { console.log('❌ 获取评审统计失败:', response.data.errors); response.data.errors.forEach(error => { console.log(` 错误: ${error.message}`); if (error.extensions) { console.log(` 扩展信息:`, error.extensions); } }); } else if (response.data.data?.reviewStatistics) { const stats = response.data.data.reviewStatistics; console.log('✅ 评审统计:'); console.log(` 未评审: ${stats.unReviewedCount}`); console.log(` 已评审: ${stats.reviewedCount}`); console.log(` 学员未评审: ${stats.studentUnReviewedCount}`); } } catch (error) { console.log('❌ 获取评审统计失败:', error.response?.data || error.message); } // 4. 测试简单的评审项目查询 console.log('\n4. 测试评审项目查询:'); try { const projectsQuery = ` query GetUnreviewedProjects { unReviewedProjects(searchKeyword: "", page: 1, pageSize: 1) { totalCount currentPage } } `; const response = await axios.post(`${BASE_URL}/graphql`, { query: projectsQuery }, { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); if (response.data.errors) { console.log('❌ 获取评审项目失败:', response.data.errors); response.data.errors.forEach(error => { console.log(` 错误: ${error.message}`); }); } else if (response.data.data?.unReviewedProjects) { const projects = response.data.data.unReviewedProjects; console.log('✅ 评审项目查询成功:'); console.log(` 总数: ${projects.totalCount}`); console.log(` 当前页: ${projects.currentPage}`); } } catch (error) { console.log('❌ 获取评审项目失败:', error.response?.data || error.message); } } // 主函数 async function main() { console.log('🔍 开始调试后端用户上下文问题...\n'); // 选择测试方式 const useNewToken = false; // 设置为true使用新token,false使用已知token if (useNewToken) { const token = await getNewWxToken(); if (token) { await debugUserContext(token); } } else { await testWithKnownToken(); } } // 运行主函数 if (require.main === module) { main(); } module.exports = { debugUserContext, getNewWxToken };