const { User } = require('./models'); const { sequelize } = require('./config/database'); const bcrypt = require('bcryptjs'); async function fixPasswordFinal() { try { console.log('=== 最终修复密码问题 ===\n'); const testPassword = 'Admin123456'; console.log('目标密码:', testPassword); // 1. 生成新的密码哈希 const newHash = await bcrypt.hash(testPassword, 10); console.log('1. 新生成的哈希:', newHash); console.log('哈希长度:', newHash.length); // 2. 验证新生成的哈希 const hashValid = await bcrypt.compare(testPassword, newHash); console.log('2. 新哈希验证:', hashValid); if (!hashValid) { console.log('❌ 生成的哈希无效,退出'); return; } // 3. 直接使用SQL更新密码 console.log('3. 直接使用SQL更新密码...'); const [affectedRows] = await sequelize.query( 'UPDATE bank_users SET password = ?, status = ?, login_attempts = 0, locked_until = NULL WHERE username = ?', { replacements: [newHash, 'active', 'admin'], type: sequelize.QueryTypes.UPDATE } ); console.log('SQL更新影响行数:', affectedRows); // 4. 验证数据库更新 console.log('4. 验证数据库更新...'); const [results] = await sequelize.query( 'SELECT username, password, status, login_attempts FROM bank_users WHERE username = ?', { replacements: ['admin'], type: sequelize.QueryTypes.SELECT } ); if (results) { console.log('数据库中的数据:'); console.log('用户名:', results.username); console.log('状态:', results.status); console.log('登录尝试次数:', results.login_attempts); console.log('密码哈希:', results.password); console.log('哈希长度:', results.password.length); // 5. 验证更新后的密码 const dbValid = await bcrypt.compare(testPassword, results.password); console.log('5. 数据库密码验证:', dbValid); if (dbValid) { console.log('🎉 密码修复成功!'); console.log('\n=== 登录信息 ==='); console.log('用户名: admin'); console.log('密码: Admin123456'); console.log('状态: active'); console.log('现在可以尝试登录了!'); } else { console.log('❌ 密码验证仍然失败'); } } else { console.log('❌ 查询数据库失败'); } } catch (error) { console.error('修复失败:', error.message); console.error('错误堆栈:', error.stack); } process.exit(0); } fixPasswordFinal();