| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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无效或已过期'
- });
- }
- };
|