const express = require('express'); const User = require('../models/User'); const { generateToken, authenticateToken } = require('../middleware/auth'); const { registerValidation, loginValidation, handleValidationErrors } = require('../middleware/validation'); const router = express.Router(); // 注册路由 router.post('/register', registerValidation, handleValidationErrors, async (req, res) => { try { const { username, email, password } = req.body; // 检查用户名是否已存在 const existingUserByUsername = await User.findByUsername(username); if (existingUserByUsername) { return res.status(400).json({ success: false, message: '用户名已存在' }); } // 检查邮箱是否已存在 const existingUserByEmail = await User.findByEmail(email); if (existingUserByEmail) { return res.status(400).json({ success: false, message: '邮箱已被注册' }); } // 创建新用户 const newUser = await User.create({ username, email, password }); // 生成JWT token const token = generateToken(newUser.id, newUser.username); res.status(201).json({ success: true, message: '注册成功', data: { user: { id: newUser.id, username: newUser.username, email: newUser.email, created_at: newUser.created_at }, token } }); } catch (error) { console.error('注册失败:', error); res.status(500).json({ success: false, message: '服务器内部错误' }); } }); // 登录路由 router.post('/login', loginValidation, handleValidationErrors, async (req, res) => { try { const { username, password } = req.body; // 查找用户(支持用户名或邮箱登录) let user = await User.findByUsername(username); if (!user) { // 如果不是用户名,尝试用邮箱查找 user = await User.findByEmail(username); } if (!user) { return res.status(401).json({ success: false, message: '用户名或密码错误' }); } // 验证密码 const isPasswordValid = await User.verifyPassword(password, user.password); if (!isPasswordValid) { return res.status(401).json({ success: false, message: '用户名或密码错误' }); } // 生成JWT token const token = generateToken(user.id, user.username); res.json({ success: true, message: '登录成功', data: { user: { id: user.id, username: user.username, email: user.email, created_at: user.created_at }, token } }); } catch (error) { console.error('登录失败:', error); res.status(500).json({ success: false, message: '服务器内部错误' }); } }); // 获取当前用户信息(需要认证) router.get('/profile', authenticateToken, async (req, res) => { try { const user = await User.findByUsername(req.user.username); if (!user) { return res.status(404).json({ success: false, message: '用户不存在' }); } res.json({ success: true, data: { user: { id: user.id, username: user.username, email: user.email, created_at: user.created_at } } }); } catch (error) { console.error('获取用户信息失败:', error); res.status(500).json({ success: false, message: '服务器内部错误' }); } }); // 测试路由(需要认证) router.get('/test', authenticateToken, (req, res) => { res.json({ success: true, message: '认证成功', data: { user: req.user } }); }); module.exports = router;