const bcrypt = require('bcrypt'); const jwt = require('jsonwebtoken'); const pool = require('../config/db'); const logger = require('../logger'); // 引入日志记录器 exports.register = async (req, res) => { const { username, password } = req.body; logger.info(`开始处理用户注册请求: ${username}`); try { const [users] = await pool.promise().query('SELECT * FROM users WHERE username = ?', [username]); if (users.length > 0) { logger.warn(`用户注册失败:用户名 ${username} 已存在`); // 记录警告日志 return res.status(400).json({ message: '用户名已存在' }); } const saltRounds = 10; const hashedPassword = await bcrypt.hash(password, saltRounds); logger.debug('密码加密完成'); const [result] = await pool.promise().query( 'INSERT INTO users (username, password) VALUES (?, ?)', [username, hashedPassword] ); logger.info(`用户 ${username} 注册成功,用户ID:${result.insertId}`); // 记录成功日志 res.status(201).json({ success: true, message: '用户注册成功', userId: result.insertId }); } catch (error) { logger.error('注册过程发生错误:', error); // 记录错误日志 res.status(500).json({ success: false, message: '注册失败,请稍后重试' }); } }; exports.login = async (req, res) => { const { username, password } = req.body; logger.info(`用户登录尝试: ${username}`); try { const [users] = await pool.promise().query('SELECT * FROM users WHERE username = ?', [username]); if (users.length === 0) { logger.warn(`登录失败:用户名 ${username} 不存在`); // 记录警告日志 return res.status(401).json({ success: false, message: '用户名或密码错误' }); } const user = users[0]; const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) { logger.warn(`用户 ${username} 登录失败:密码错误`); // 记录警告日志 return res.status(401).json({ success: false, message: '用户名或密码错误' }); } const token = jwt.sign({ userId: user.id }, 'your-secret-key', { expiresIn: '1h' }); logger.info(`用户 ${username} 登录成功,生成新的token`); logger.debug(`用户 ${username} 的token将在1小时后过期`); res.json({ success: true, token, message: '登录成功' }); } catch (error) { logger.error('登录过程发生错误:', error); // 记录错误日志 res.status(500).json({ success: false, message: '登录失败,请稍后重试' }); } }; // 可以添加其他身份验证相关的方法 exports.verifyToken = (req, res, next) => { const token = req.headers.authorization?.split(' ')[1]; logger.debug('开始验证token'); if (!token) { logger.warn('请求未携带token'); return res.status(401).json({ success: false, message: '未提供认证token' }); } try { const decoded = jwt.verify(token, 'your-secret-key'); req.userId = decoded.userId; logger.debug(`token验证成功,用户ID: ${decoded.userId}`); next(); } catch (error) { logger.error('token验证失败:', error); res.status(401).json({ success: false, message: 'token无效或已过期' }); } };