const axios = require('axios');
|
|
// 配置
|
const BASE_URL = 'http://localhost:8080/api';
|
|
// JWT token解码函数(不验证签名,仅用于调试)
|
function decodeJwtToken(token) {
|
try {
|
// JWT token格式:header.payload.signature
|
const parts = token.split('.');
|
if (parts.length !== 3) {
|
throw new Error('Invalid JWT token format');
|
}
|
|
// 解码header
|
const header = JSON.parse(Buffer.from(parts[0], 'base64url').toString());
|
|
// 解码payload
|
const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString());
|
|
return {
|
header,
|
payload,
|
signature: parts[2]
|
};
|
} catch (error) {
|
console.error('JWT token解码失败:', error.message);
|
return null;
|
}
|
}
|
|
// 测试JWT token内容
|
async function debugJwtToken(token) {
|
console.log('=== JWT Token 调试 ===');
|
|
if (!token || token === 'PASTE_YOUR_VALID_TOKEN_HERE') {
|
console.log('❌ 请提供有效的JWT token');
|
return;
|
}
|
|
console.log('Token长度:', token.length);
|
console.log('Token前50字符:', token.substring(0, 50) + '...');
|
|
// 解码JWT token
|
const decoded = decodeJwtToken(token);
|
if (decoded) {
|
console.log('\n📋 JWT Token 内容:');
|
console.log('Header:', JSON.stringify(decoded.header, null, 2));
|
console.log('Payload:', JSON.stringify(decoded.payload, null, 2));
|
|
// 检查关键字段
|
if (decoded.payload.userId) {
|
console.log(`\n🔍 用户ID: ${decoded.payload.userId}`);
|
console.log(` 类型: ${typeof decoded.payload.userId}`);
|
console.log(` 是否为负数: ${decoded.payload.userId < 0}`);
|
} else {
|
console.log('\n⚠️ Token中没有找到userId字段');
|
}
|
|
if (decoded.payload.sub) {
|
console.log(`\n🔍 Subject: ${decoded.payload.sub}`);
|
}
|
|
if (decoded.payload.exp) {
|
const expDate = new Date(decoded.payload.exp * 1000);
|
const now = new Date();
|
console.log(`\n⏰ Token过期时间: ${expDate.toLocaleString()}`);
|
console.log(` 当前时间: ${now.toLocaleString()}`);
|
console.log(` 是否已过期: ${now > expDate}`);
|
}
|
}
|
|
// 测试token验证
|
console.log('\n=== Token 验证测试 ===');
|
await testTokenValidation(token);
|
}
|
|
// 测试token验证
|
async function testTokenValidation(token) {
|
try {
|
// 1. 测试简单的GraphQL查询
|
console.log('1. 测试简单查询:');
|
const simpleQuery = `
|
query {
|
__typename
|
}
|
`;
|
|
const response = await axios.post(`${BASE_URL}/graphql`, {
|
query: simpleQuery
|
}, {
|
headers: {
|
'Authorization': `Bearer ${token}`,
|
'Content-Type': 'application/json'
|
}
|
});
|
|
if (response.status === 200) {
|
console.log('✅ Token验证通过(基础查询成功)');
|
} else {
|
console.log('❌ Token验证失败,状态码:', response.status);
|
}
|
|
} catch (error) {
|
console.log('❌ Token验证失败:', error.response?.status, error.response?.data || error.message);
|
}
|
|
try {
|
// 2. 测试需要认证的查询
|
console.log('\n2. 测试认证查询:');
|
const authQuery = `
|
query GetCurrentUser {
|
currentUser {
|
id
|
name
|
phone
|
}
|
}
|
`;
|
|
const response = await axios.post(`${BASE_URL}/graphql`, {
|
query: authQuery
|
}, {
|
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}`);
|
|
// 检查用户ID是否匹配
|
if (user.id === 152) {
|
console.log('✅ 用户ID匹配(152)');
|
} else {
|
console.log(`⚠️ 用户ID不匹配,期望152,实际${user.id}`);
|
}
|
} else {
|
console.log('⚠️ 认证查询返回空结果');
|
}
|
|
} catch (error) {
|
console.log('❌ 认证查询失败:', error.response?.status, error.response?.data || error.message);
|
}
|
|
try {
|
// 3. 测试评委查询
|
console.log('\n3. 测试评委查询:');
|
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}`);
|
|
// 检查评委ID是否匹配
|
if (judge.judgeId === 72) {
|
console.log('✅ 评委ID匹配(72)');
|
} else {
|
console.log(`⚠️ 评委ID不匹配,期望72,实际${judge.judgeId}`);
|
}
|
} else {
|
console.log('⚠️ 评委查询返回空结果(可能不是评委)');
|
}
|
|
} catch (error) {
|
console.log('❌ 评委查询失败:', error.response?.status, error.response?.data || error.message);
|
}
|
}
|
|
// 获取新的微信登录token并调试
|
async function getAndDebugNewToken() {
|
console.log('=== 获取新的微信登录token ===');
|
|
try {
|
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;
|
}
|
|
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;
|
}
|
|
const loginData = response.data.data.wxLogin;
|
console.log('✅ 微信登录成功:');
|
console.log('- 用户ID:', loginData.userInfo?.userId);
|
console.log('- 用户名:', loginData.userInfo?.name);
|
console.log('- 用户类型:', loginData.userInfo?.userType);
|
console.log('- 是否有评委权限:', loginData.hasJudge);
|
|
if (loginData.token) {
|
console.log('\n开始调试新获取的token...');
|
await debugJwtToken(loginData.token);
|
} else {
|
console.log('❌ 未获取到token');
|
}
|
|
} catch (error) {
|
console.error('❌ 微信登录失败:', error.response?.data || error.message);
|
}
|
}
|
|
// 主函数
|
async function main() {
|
console.log('🔍 开始JWT Token调试...\n');
|
|
// 选择调试方式
|
const useExistingToken = true; // 设置为true使用已有token,false获取新token
|
|
if (useExistingToken) {
|
// 使用已有的token进行调试
|
const existingToken = 'PASTE_YOUR_VALID_TOKEN_HERE'; // 请替换为你的token
|
await debugJwtToken(existingToken);
|
} else {
|
// 获取新token并调试
|
await getAndDebugNewToken();
|
}
|
}
|
|
// 运行主函数
|
if (require.main === module) {
|
main();
|
}
|
|
module.exports = { debugJwtToken, decodeJwtToken };
|