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();