Spaces:
Sleeping
Sleeping
| const asyncHandler = require('express-async-handler'); | |
| const User = require('../models/User'); | |
| const { generateToken } = require('../config/auth'); | |
| const logger = require('../utils/logger'); | |
| // @desc 用户注册 | |
| // @route POST /api/auth/register | |
| // @access Public | |
| const registerUser = asyncHandler(async (req, res) => { | |
| const { username, password } = req.body; | |
| // 检查用户是否已存在 | |
| const userExists = await User.findOne({ username }); | |
| if (userExists) { | |
| res.status(400); | |
| throw new Error('用户已存在'); | |
| } | |
| // 创建用户 | |
| const user = await User.create({ | |
| username, | |
| password, | |
| }); | |
| if (user) { | |
| res.status(201).json({ | |
| _id: user._id, | |
| username: user.username, | |
| isAdmin: user.isAdmin, | |
| token: generateToken(user._id), | |
| }); | |
| } else { | |
| res.status(400); | |
| throw new Error('无效的用户数据'); | |
| } | |
| }); | |
| // @desc 用户登录 | |
| // @route POST /api/auth/login | |
| // @access Public | |
| const loginUser = asyncHandler(async (req, res) => { | |
| const { username, password } = req.body; | |
| logger.info(`登录尝试: ${username}`); | |
| // 查找用户 | |
| const user = await User.findOne({ username }); | |
| if (!user) { | |
| logger.warn(`用户不存在: ${username}`); | |
| res.status(401); | |
| throw new Error('用户名或密码错误'); | |
| } | |
| // 检查密码 | |
| const isMatch = await user.matchPassword(password); | |
| logger.info(`密码匹配结果: ${isMatch}`); | |
| if (isMatch) { | |
| const token = generateToken(user._id); | |
| logger.info(`登录成功: ${username}`); | |
| res.json({ | |
| _id: user._id, | |
| username: user.username, | |
| isAdmin: user.isAdmin, | |
| token: token, | |
| }); | |
| } else { | |
| logger.warn(`密码不匹配: ${username}`); | |
| res.status(401); | |
| throw new Error('用户名或密码错误'); | |
| } | |
| }); | |
| // @desc 获取当前用户资料 | |
| // @route GET /api/auth/profile | |
| // @access Private | |
| const getUserProfile = asyncHandler(async (req, res) => { | |
| const user = await User.findById(req.user._id).select('-password'); | |
| if (user) { | |
| res.json({ | |
| _id: user._id, | |
| username: user.username, | |
| isAdmin: user.isAdmin, | |
| }); | |
| } else { | |
| res.status(404); | |
| throw new Error('用户未找到'); | |
| } | |
| }); | |
| module.exports = { | |
| registerUser, | |
| loginUser, | |
| getUserProfile, | |
| }; |