84 lines
2.8 KiB
JavaScript
84 lines
2.8 KiB
JavaScript
const { User } = require('./models');
|
||
const bcrypt = require('bcryptjs');
|
||
|
||
async function debugThisPassword() {
|
||
try {
|
||
console.log('=== 调试this.password问题 ===\n');
|
||
|
||
// 1. 获取用户
|
||
const user = await User.findOne({ where: { username: 'admin' } });
|
||
if (!user) {
|
||
console.log('❌ 未找到admin用户');
|
||
return;
|
||
}
|
||
|
||
console.log('1. 用户基本信息:');
|
||
console.log('用户名:', user.username);
|
||
console.log('this.password类型:', typeof user.password);
|
||
console.log('this.password值:', user.password);
|
||
console.log('this.password长度:', user.password ? user.password.length : 0);
|
||
console.log('');
|
||
|
||
// 2. 测试密码
|
||
const testPassword = 'Admin123456';
|
||
console.log('2. 测试密码:', testPassword);
|
||
console.log('');
|
||
|
||
// 3. 直接使用bcrypt比较
|
||
console.log('3. 直接使用bcrypt比较:');
|
||
const directTest = await bcrypt.compare(testPassword, user.password);
|
||
console.log('直接bcrypt验证结果:', directTest);
|
||
console.log('');
|
||
|
||
// 4. 检查this.password是否为空或undefined
|
||
console.log('4. 检查this.password状态:');
|
||
console.log('this.password === null:', user.password === null);
|
||
console.log('this.password === undefined:', user.password === undefined);
|
||
console.log('this.password === "":', user.password === "");
|
||
console.log('this.password存在:', !!user.password);
|
||
console.log('');
|
||
|
||
// 5. 如果this.password有问题,重新设置
|
||
if (!user.password || user.password === '') {
|
||
console.log('5. this.password有问题,重新设置...');
|
||
const newHash = await bcrypt.hash(testPassword, 10);
|
||
console.log('新生成的哈希:', newHash);
|
||
|
||
await user.update({ password: newHash });
|
||
await user.reload();
|
||
|
||
console.log('更新后的this.password:', user.password);
|
||
console.log('更新后的this.password类型:', typeof user.password);
|
||
console.log('');
|
||
}
|
||
|
||
// 6. 再次测试
|
||
console.log('6. 再次测试密码验证:');
|
||
const finalTest = await user.validPassword(testPassword);
|
||
console.log('最终验证结果:', finalTest);
|
||
|
||
// 7. 手动测试bcrypt
|
||
console.log('7. 手动测试bcrypt:');
|
||
const manualTest = await bcrypt.compare(testPassword, user.password);
|
||
console.log('手动bcrypt验证结果:', manualTest);
|
||
|
||
if (finalTest && manualTest) {
|
||
console.log('🎉 密码验证成功!');
|
||
} else {
|
||
console.log('❌ 密码验证失败');
|
||
console.log('可能的原因:');
|
||
console.log('- this.password为空或undefined');
|
||
console.log('- 数据库更新失败');
|
||
console.log('- Sequelize模型问题');
|
||
}
|
||
|
||
} catch (error) {
|
||
console.error('调试失败:', error.message);
|
||
console.error('错误堆栈:', error.stack);
|
||
}
|
||
|
||
process.exit(0);
|
||
}
|
||
|
||
debugThisPassword();
|