userController.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. const User = require('../models/User');
  2. const jwt = require('jsonwebtoken');
  3. // 生成 JWT token
  4. const generateToken = (id) => {
  5. return jwt.sign({ id }, process.env.JWT_SECRET || 'your-secret-key', {
  6. expiresIn: '30d'
  7. });
  8. };
  9. // @desc 用户登录
  10. // @route POST /api/users/login
  11. // @access Public
  12. const loginUser = async (req, res) => {
  13. try {
  14. const { username, password } = req.body;
  15. if (!username || !password) {
  16. return res.status(400).json({ message: '请提供用户名和密码' });
  17. }
  18. const user = await User.findByUsername(username);
  19. console.log('查询到的用户:', user); // 调试日志
  20. if (!user) {
  21. return res.status(401).json({ message: '用户名或密码错误' });
  22. }
  23. const isMatch = await User.comparePassword(password, user.password);
  24. console.log('密码匹配结果:', isMatch); // 调试日志
  25. if (isMatch) {
  26. res.json({
  27. _id: user.id,
  28. username: user.username,
  29. role: user.role,
  30. token: generateToken(user.id)
  31. });
  32. } else {
  33. res.status(401).json({ message: '用户名或密码错误' });
  34. }
  35. } catch (error) {
  36. console.error('登录错误:', error); // 详细错误日志
  37. res.status(500).json({
  38. message: '服务器错误',
  39. error: process.env.NODE_ENV === 'development' ? error.message : undefined
  40. });
  41. }
  42. };
  43. // @desc 修改密码
  44. // @route PUT /api/users/password
  45. // @access Private
  46. const updatePassword = async (req, res) => {
  47. try {
  48. const { currentPassword, newPassword } = req.body;
  49. const user = await User.findById(req.user.id);
  50. if (await User.comparePassword(currentPassword, user.password)) {
  51. await User.updatePassword(user.id, newPassword);
  52. res.json({ message: '密码修改成功' });
  53. } else {
  54. res.status(401).json({ message: '当前密码错误' });
  55. }
  56. } catch (error) {
  57. res.status(500).json({ message: '服务器错误' });
  58. }
  59. };
  60. // @desc 获取用户信息
  61. // @route GET /api/users/profile
  62. // @access Private
  63. const getUserProfile = async (req, res) => {
  64. try {
  65. const user = await User.findById(req.user.id);
  66. if (user) {
  67. res.json({
  68. _id: user.id,
  69. username: user.username,
  70. role: user.role
  71. });
  72. } else {
  73. res.status(404).json({ message: '用户不存在' });
  74. }
  75. } catch (error) {
  76. res.status(500).json({ message: '服务器错误' });
  77. }
  78. };
  79. module.exports = {
  80. loginUser,
  81. updatePassword,
  82. getUserProfile
  83. };