Files
yunhaifinance/backend/fix-auth-final.js
T

124 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const fs = require('fs');
const content = fs.readFileSync('routes/auth.js', 'utf8');
// 修复导入:使用utils/auth.js中的generateToken,因为middleware/auth.js中的hashPassword和verifyPassword使用SHA-256,但数据库中可能是bcrypt
// 实际上,我们需要检查数据库中实际的密码哈希格式
// 但为了简化,让我们使用utils/auth.js中的函数
const fixedContent = `const express = require('express');
const router = express.Router();
// 导入依赖
const db = require('../db-sqlite');
const { hashPassword, verifyPassword, generateToken } = require('../utils/auth');
const { authenticate } = require('../middleware/auth');
router.post('/login', async (req, res) => {
try {
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).json({
success: false,
message: '用户名和密码不能为空'
});
}
// 从数据库中查询用户(同时获取 password_hash
const result = await db.query(
'SELECT id, username, name, email, phone, role, password_hash FROM users WHERE username = ?',
[username]
);
if (!result || result.rows.length === 0) {
return res.status(401).json({
success: false,
message: '用户名或密码错误'
});
}
const user = result.rows[0];
// 验证密码(兼容旧版明文密码和新版哈希密码)
let isValidPassword = false;
if (user.password_hash) {
// 使用哈希验证
isValidPassword = verifyPassword(password, user.password_hash);
} else {
// 兼容旧版明文密码(用于迁移过渡)
isValidPassword = (user.password === password);
}
if (!isValidPassword) {
return res.status(401).json({
success: false,
message: '用户名或密码错误'
});
}
// 生成 JWT Token
const token = generateToken({
id: user.id,
username: user.username,
role: user.role
});
console.log(\`用户 \${username} 登录成功\`);
res.json({
success: true,
data: {
id: user.id,
username: user.username,
name: user.name,
email: user.email,
phone: user.phone,
role: user.role,
department: '',
token: token
}
});
} catch (error) {
console.error('登录失败:', error);
res.status(500).json({
success: false,
message: '登录失败',
error: error.message
});
}
});
// 验证 Token API
router.get('/verify', authenticate, (req, res) => {
res.json({
success: true,
data: {
user: req.user
}
});
});
// 登出 API(客户端删除 token 即可,这里记录日志)
router.post('/logout', authenticate, (req, res) => {
console.log(\`用户 \${req.user.username} 登出\`);
res.json({
success: true,
message: '登出成功'
});
});
module.exports = router;`;
// 写入修复后的文件
fs.writeFileSync('routes/auth.js', fixedContent);
console.log('✅ 已修复auth路由文件,使用utils/auth.js中的函数');
// 验证修复
const fixedFileContent = fs.readFileSync('routes/auth.js', 'utf8');
if (fixedFileContent.includes("require('../utils/auth')") &&
fixedFileContent.includes('verifyPassword') &&
fixedFileContent.includes('generateToken')) {
console.log('✅ auth路由文件修复验证成功');
} else {
console.log('❌ auth路由文件修复验证失败');
process.exit(1);
}