const { User } = require('./models'); const bcrypt = require('bcryptjs'); async function testDatabaseStorage() { try { console.log('=== 测试数据库存储问题 ===\n'); // 1. 生成一个新的密码哈希 const testPassword = 'Admin123456'; const newHash = await bcrypt.hash(testPassword, 10); console.log('1. 生成新的密码哈希:'); console.log('原始密码:', testPassword); console.log('生成的哈希:', newHash); console.log('哈希长度:', newHash.length); console.log(''); // 2. 验证新生成的哈希 console.log('2. 验证新生成的哈希:'); const isValid = await bcrypt.compare(testPassword, newHash); console.log('新哈希验证结果:', isValid); console.log(''); // 3. 更新数据库 console.log('3. 更新数据库:'); const user = await User.findOne({ where: { username: 'admin' } }); if (!user) { console.log('❌ 未找到admin用户'); return; } await user.update({ password: newHash }); console.log('✅ 数据库已更新'); console.log(''); // 4. 重新查询数据库 console.log('4. 重新查询数据库:'); const updatedUser = await User.findOne({ where: { username: 'admin' } }); if (updatedUser) { console.log('查询到的密码哈希:', updatedUser.password); console.log('查询到的哈希长度:', updatedUser.password.length); console.log('哈希是否匹配:', updatedUser.password === newHash); console.log(''); // 5. 测试查询到的哈希 console.log('5. 测试查询到的哈希:'); const queryTest = await bcrypt.compare(testPassword, updatedUser.password); console.log('查询到的哈希验证结果:', queryTest); console.log(''); // 6. 测试User模型的validPassword方法 console.log('6. 测试User模型的validPassword方法:'); const modelTest = await updatedUser.validPassword(testPassword); console.log('模型验证结果:', modelTest); console.log(''); if (queryTest && modelTest) { console.log('🎉 数据库存储和验证都正常!'); } else if (queryTest && !modelTest) { console.log('❌ 数据库存储正常,但User模型验证失败'); console.log('可能原因: User模型的validPassword方法有问题'); } else if (!queryTest && modelTest) { console.log('❌ 数据库存储有问题,但User模型验证成功'); console.log('可能原因: 数据库存储时数据被截断或损坏'); } else { console.log('❌ 数据库存储和User模型验证都失败'); console.log('可能原因: 数据库字段长度不够或编码问题'); } } else { console.log('❌ 重新查询用户失败'); } } catch (error) { console.error('测试失败:', error.message); console.error('错误堆栈:', error.stack); } process.exit(0); } testDatabaseStorage();