const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const db = require('../db'); const config = require('../config'); const logger = require('../utils/logger'); const router = express.Router(); // JWT 中间件 function auth(req, res, next) { const token = req.headers.authorization?.split(' ')[1]; if (!token) return res.status(401).json({ error: '未登录' }); try { req.user = jwt.verify(token, config.jwtSecret); next(); } catch { res.status(401).json({ error: '登录已过期' }); } } // 登录 router.post('/login', (req, res) => { const { username, password } = req.body; if (!username || !password) { return res.status(400).json({ error: '用户名和密码不能为空' }); } const user = db.prepare('SELECT * FROM users WHERE username = ?').get(username); if (!user || !bcrypt.compareSync(password, user.password)) { logger.warn(`登录失败: ${username}`); return res.status(401).json({ error: '用户名或密码错误' }); } const token = jwt.sign({ id: user.id, username: user.username }, config.jwtSecret, { expiresIn: config.jwtExpiresIn }); logger.info(`用户登录: ${username}`); res.json({ token, username: user.username }); }); module.exports = { router, auth };