123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- 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
- };
|