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