const fs = require('fs'); const content = fs.readFileSync('routes/auth.js', 'utf8'); // 修复导入:从../middleware/auth导入所有需要的函数 const fixedContent = `const express = require('express'); const router = express.Router(); // 导入依赖 const db = require('../db-sqlite'); const { hashPassword, verifyPassword, generateToken } = require('../middleware/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路由文件'); // 验证修复 const fixedFileContent = fs.readFileSync('routes/auth.js', 'utf8'); console.log(`文件大小:${fixedFileContent.length} 字符`); // 检查关键函数是否存在 if (fixedFileContent.includes('verifyPassword') && fixedFileContent.includes('generateToken') && fixedFileContent.includes('authenticate')) { console.log('✅ auth路由文件修复验证成功'); } else { console.log('❌ auth路由文件修复验证失败'); process.exit(1); }