const { User, Role } = require('./models'); const bcrypt = require('bcryptjs'); async function testAuth() { try { console.log('=== 测试认证逻辑 ==='); // 查找用户(包含角色) const user = await User.findOne({ where: { username: 'admin' }, include: [{ model: Role, as: 'role' }] }); if (!user) { console.log('❌ 未找到admin用户'); return; } console.log('✅ 找到admin用户'); console.log('用户名:', user.username); console.log('状态:', user.status); console.log('角色:', user.role ? user.role.name : '无角色'); console.log('密码哈希:', user.password); // 测试密码验证 const testPassword = 'Admin123456'; console.log('\n=== 测试密码验证 ==='); 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 (!modelTest) { console.log('\n=== 重新生成密码 ==='); 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 user.validPassword(testPassword); console.log('最终验证:', finalTest); if (finalTest) { console.log('🎉 密码修复成功!'); console.log('用户名: admin'); console.log('密码: Admin123456'); console.log('状态: active'); } } else { console.log('✅ 密码验证成功!'); } } catch (error) { console.error('测试失败:', error.message); console.error('错误堆栈:', error.stack); } process.exit(0); } testAuth();