83 lines
2.8 KiB
JavaScript
83 lines
2.8 KiB
JavaScript
|
|
const { User } = require('./models');
|
||
|
|
const bcrypt = require('bcryptjs');
|
||
|
|
|
||
|
|
async function testValidPassword() {
|
||
|
|
try {
|
||
|
|
console.log('=== 测试User模型的validPassword方法 ===\n');
|
||
|
|
|
||
|
|
// 1. 获取用户
|
||
|
|
const user = await User.findOne({ where: { username: 'admin' } });
|
||
|
|
if (!user) {
|
||
|
|
console.log('❌ 未找到admin用户');
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('✅ 找到admin用户');
|
||
|
|
console.log('用户名:', user.username);
|
||
|
|
console.log('密码哈希:', user.password);
|
||
|
|
console.log('');
|
||
|
|
|
||
|
|
// 2. 测试密码
|
||
|
|
const testPassword = 'Admin123456';
|
||
|
|
console.log('测试密码:', testPassword);
|
||
|
|
|
||
|
|
// 3. 直接使用bcrypt比较
|
||
|
|
console.log('3. 直接使用bcrypt比较...');
|
||
|
|
const directTest = await bcrypt.compare(testPassword, user.password);
|
||
|
|
console.log('直接bcrypt验证结果:', directTest);
|
||
|
|
|
||
|
|
// 4. 使用User模型的validPassword方法
|
||
|
|
console.log('4. 使用User模型的validPassword方法...');
|
||
|
|
const modelTest = await user.validPassword(testPassword);
|
||
|
|
console.log('模型验证结果:', modelTest);
|
||
|
|
|
||
|
|
// 5. 检查User模型的validPassword方法实现
|
||
|
|
console.log('5. 检查User模型的validPassword方法实现...');
|
||
|
|
console.log('validPassword方法:', user.validPassword.toString());
|
||
|
|
|
||
|
|
// 6. 手动测试bcrypt
|
||
|
|
console.log('6. 手动测试bcrypt...');
|
||
|
|
const newHash = await bcrypt.hash(testPassword, 10);
|
||
|
|
console.log('新生成的哈希:', newHash);
|
||
|
|
const newTest = await bcrypt.compare(testPassword, newHash);
|
||
|
|
console.log('新哈希验证结果:', newTest);
|
||
|
|
|
||
|
|
// 7. 更新用户密码并测试
|
||
|
|
console.log('7. 更新用户密码并测试...');
|
||
|
|
await user.update({ password: newHash });
|
||
|
|
console.log('密码已更新');
|
||
|
|
|
||
|
|
// 重新加载用户数据
|
||
|
|
await user.reload();
|
||
|
|
console.log('用户数据已重新加载');
|
||
|
|
console.log('更新后的密码哈希:', user.password);
|
||
|
|
|
||
|
|
// 再次测试
|
||
|
|
const finalTest = await user.validPassword(testPassword);
|
||
|
|
console.log('更新后的验证结果:', finalTest);
|
||
|
|
|
||
|
|
if (finalTest) {
|
||
|
|
console.log('🎉 密码验证成功!');
|
||
|
|
} else {
|
||
|
|
console.log('❌ 密码验证仍然失败');
|
||
|
|
|
||
|
|
// 检查是否是数据库问题
|
||
|
|
console.log('8. 检查数据库问题...');
|
||
|
|
const freshUser = await User.findOne({ where: { username: 'admin' } });
|
||
|
|
if (freshUser) {
|
||
|
|
console.log('重新查询的用户密码哈希:', freshUser.password);
|
||
|
|
const freshTest = await freshUser.validPassword(testPassword);
|
||
|
|
console.log('重新查询的验证结果:', freshTest);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
console.error('测试失败:', error.message);
|
||
|
|
console.error('错误堆栈:', error.stack);
|
||
|
|
}
|
||
|
|
|
||
|
|
process.exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
testValidPassword();
|