81 lines
2.2 KiB
JavaScript
81 lines
2.2 KiB
JavaScript
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();
|