authMiddleware.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const jwt = require('jsonwebtoken');
  2. const User = require('../models/User');
  3. // 保护路由中间件
  4. const protect = async (req, res, next) => {
  5. try {
  6. let token;
  7. // 从请求头中获取token
  8. if (req.headers.authorization && req.headers.authorization.startsWith('Bearer')) {
  9. token = req.headers.authorization.split(' ')[1];
  10. }
  11. if (!token) {
  12. return res.status(401).json({ message: '未授权,请登录' });
  13. }
  14. try {
  15. // 验证token
  16. const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your-secret-key');
  17. // 获取用户信息
  18. const user = await User.findById(decoded.id);
  19. if (!user) {
  20. return res.status(401).json({ message: '用户不存在' });
  21. }
  22. // 将用户信息添加到请求对象中
  23. req.user = user;
  24. next();
  25. } catch (error) {
  26. console.error('Token验证失败:', error);
  27. return res.status(401).json({ message: '无效的token' });
  28. }
  29. } catch (error) {
  30. console.error('认证中间件错误:', error);
  31. res.status(500).json({ message: '服务器错误' });
  32. }
  33. };
  34. module.exports = {
  35. protect
  36. };