const User = require('../models/User'); const jwt = require('jsonwebtoken'); // 生成 JWT token const generateToken = (id) => { return jwt.sign({ id }, process.env.JWT_SECRET || 'your-secret-key', { expiresIn: '30d' }); }; // @desc 用户登录 // @route POST /api/users/login // @access Public const loginUser = async (req, res) => { try { console.log('收到登录请求:', req.body); const { username, password } = req.body; if (!username || !password) { console.log('缺少用户名或密码'); return res.status(400).json({ message: '请提供用户名和密码' }); } const user = await User.findByUsername(username); console.log('查询到的用户:', user ? '找到用户' : '未找到用户'); if (!user) { console.log('用户不存在'); return res.status(401).json({ message: '用户名或密码错误' }); } const isMatch = await User.comparePassword(password, user.password); console.log('密码匹配结果:', isMatch); if (isMatch) { console.log('登录成功,生成token'); const token = generateToken(user.id); // console.log('生成的token:', token); res.json({ _id: user.id, username: user.username, role: user.role, token: token }); } else { console.log('密码错误'); res.status(401).json({ message: '用户名或密码错误' }); } } catch (error) { console.error('登录错误:', error); res.status(500).json({ message: '服务器错误', error: process.env.NODE_ENV === 'development' ? error.message : undefined }); } }; // @desc 修改密码 // @route PUT /api/users/password // @access Private const updatePassword = async (req, res) => { try { const { currentPassword, newPassword } = req.body; const user = await User.findById(req.user.id); if (await User.comparePassword(currentPassword, user.password)) { await User.updatePassword(user.id, newPassword); res.json({ message: '密码修改成功' }); } else { res.status(401).json({ message: '当前密码错误' }); } } catch (error) { res.status(500).json({ message: '服务器错误' }); } }; // @desc 获取用户信息 // @route GET /api/users/profile // @access Private const getUserProfile = async (req, res) => { try { const user = await User.findById(req.user.id); if (user) { res.json({ _id: user.id, username: user.username, role: user.role }); } else { res.status(404).json({ message: '用户不存在' }); } } catch (error) { res.status(500).json({ message: '服务器错误' }); } }; // @desc 获取用户信息 // @route GET /api/users/:id // @access Private const getUserById = async (req, res) => { try { const user = await User.findById(req.params.id); if (user) { res.json({ id: user.id, username: user.username, contact: user.contact || '', remark: user.remark || '', role: user.role }); } else { res.status(404).json({ message: '用户不存在' }); } } catch (error) { console.error('获取用户信息失败:', error); res.status(500).json({ message: '服务器错误' }); } }; // @desc 更新用户信息 // @route PUT /api/users/:id // @access Private const updateUser = async (req, res) => { try { const { contact, remark } = req.body; const userId = req.params.id; // 检查用户是否存在 const user = await User.findById(userId); if (!user) { return res.status(404).json({ message: '用户不存在' }); } // 更新用户信息 await User.update(userId, { contact, remark }); res.json({ success: true, message: '用户信息更新成功' }); } catch (error) { console.error('更新用户信息失败:', error); res.status(500).json({ success: false, message: '服务器错误' }); } }; module.exports = { loginUser, updatePassword, getUserProfile, getUserById, updateUser };