Files
nxxmdata/bank-backend/debug-auth-detailed.js
2025-09-24 17:49:32 +08:00

132 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { User, Role } = require('./models');
const bcrypt = require('bcryptjs');
async function debugAuthDetailed() {
try {
console.log('=== 详细调试认证逻辑 ===\n');
// 1. 检查数据库连接
console.log('1. 检查数据库连接...');
const user = await User.findOne({ where: { username: 'admin' } });
if (!user) {
console.log('❌ 未找到admin用户');
return;
}
console.log('✅ 数据库连接正常找到admin用户\n');
// 2. 检查用户基本信息
console.log('2. 检查用户基本信息...');
console.log('用户名:', user.username);
console.log('状态:', user.status);
console.log('登录尝试次数:', user.login_attempts);
console.log('锁定时间:', user.locked_until);
console.log('密码哈希:', user.password);
console.log('');
// 3. 检查用户角色关联
console.log('3. 检查用户角色关联...');
const userWithRole = await User.findOne({
where: { username: 'admin' },
include: [{
model: Role,
as: 'role'
}]
});
if (userWithRole) {
console.log('✅ 用户角色关联正常');
console.log('角色:', userWithRole.role ? userWithRole.role.name : '无角色');
} else {
console.log('❌ 用户角色关联失败');
}
console.log('');
// 4. 测试密码验证
console.log('4. 测试密码验证...');
const testPassword = 'Admin123456';
console.log('测试密码:', testPassword);
// 直接使用bcrypt比较
const directTest = await bcrypt.compare(testPassword, user.password);
console.log('直接bcrypt验证:', directTest);
// 使用模型方法验证
const modelTest = await user.validPassword(testPassword);
console.log('模型验证:', modelTest);
if (!directTest) {
console.log('❌ 密码不匹配,重新生成密码...');
const newHash = await bcrypt.hash(testPassword, 10);
console.log('新哈希:', newHash);
await user.update({
password: newHash,
status: 'active',
login_attempts: 0,
locked_until: null
});
console.log('✅ 密码已更新');
// 重新加载用户数据
await user.reload();
// 再次验证
const finalTest = await bcrypt.compare(testPassword, user.password);
console.log('最终验证:', finalTest);
if (finalTest) {
console.log('🎉 密码修复成功!');
} else {
console.log('❌ 密码修复失败');
}
} else {
console.log('✅ 密码验证成功');
}
console.log('');
// 5. 模拟完整的登录流程
console.log('5. 模拟完整的登录流程...');
const loginUser = await User.findOne({
where: { username: 'admin' },
include: [{
model: Role,
as: 'role'
}]
});
if (loginUser) {
console.log('✅ 用户查找成功');
console.log('用户状态:', loginUser.status);
if (loginUser.status !== 'active') {
console.log('❌ 用户状态不是active:', loginUser.status);
} else {
console.log('✅ 用户状态正常');
}
const passwordValid = await loginUser.validPassword(testPassword);
console.log('密码验证结果:', passwordValid);
if (passwordValid) {
console.log('🎉 完整登录流程验证成功!');
console.log('用户名: admin');
console.log('密码: Admin123456');
console.log('状态: active');
} else {
console.log('❌ 密码验证失败');
}
} else {
console.log('❌ 用户查找失败');
}
} catch (error) {
console.error('调试失败:', error.message);
console.error('错误堆栈:', error.stack);
}
process.exit(0);
}
debugAuthDetailed();