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