如何在 node.js 中设置受保护的路由?与我拥有的 userRoutes.js 相同

Posted

技术标签:

【中文标题】如何在 node.js 中设置受保护的路由?与我拥有的 userRoutes.js 相同【英文标题】:How to set a protected route in node.js? same as with the userRoutes.js that I have 【发布时间】:2021-05-08 23:50:57 【问题描述】:

如何将 protected 设置为 router.route('/').get(protect, getProducts) 中的第一个参数 我正在尝试保护我的“/”路线与 router.route('/profile').get(protect, getUserProfile)

Here is my authMiddleware.js file

productController.js file

productRoutes.js file

这些是我使用相同中间件的用户文件:

This is my userRoutes

这是我下面的 userRoutes.js:

import asyncHandler from 'express-async-handler'
import generateToken from '../utils/generateToken.js'
import User from '../models/userModel.js'

// @desc    Auth user & get token
// @route   POST /api/users/login
// @access  Public
const authUser = asyncHandler(async (req, res) => 
const  email, password  = req.body

const user = await User.findOne( email )

if (user && (await user.matchPassword(password))) 
res.json(
  _id: user._id,
  name: user.name,
  email: user.email,
  isAdmin: user.isAdmin,
  token: generateToken(user._id),
  )
   else 
  res.status(401)
  throw new Error('Invalid email or password')
  
  )

  // @desc    Register a new user
  // @route   POST /api/users
  // @access  Public
  const registerUser = asyncHandler(async (req, res) => 
  const  name, email, password  = req.body

  const userExist = await User.findOne( email )

  if (userExist) 
  res.status(400)
  throw new Error('User already exists')
  

  const user = await User.create(
  name,
  email,
  password,
  )

  if (user) 
  res.status(201).json(
  _id: user._id,
  name: user.name,
  email: user.email,
  isAdmin: user.isAdmin,
  token: generateToken(user._id),
  )
   else 
  res.status(400)
  throw new Error('Invalid user data')
  
  )

  // @desc    Get user profile
  // @route   GET /api/users/profile
  // @access  Private
  const getUserProfile = asyncHandler(async (req, res) => 
  const user = await User.findById(req.user._id)

  if (user) 
  res.json(
  _id: user._id,
  name: user.name,
  email: user.email,
  isAdmin: user.isAdmin,
  )
   else 
  res.status(404)
  throw new Error('User not found')
  
  )

  export  authUser, registerUser, getUserProfile 

【问题讨论】:

请将您的代码作为文本添加到您的问题中(并注意code formatting)。还有many good reasons,为什么图片代码不是个好主意。 你能说一下你到底想要什么吗?你想保护路由中的中间件吗? 问题可以缩小吗?这是重现问题所需的最少代码吗?通过这样做你可能会找到答案。 【参考方案1】:

我认为你可以这样做:

router.get('/', [protect], getProducts);

调用你的中间件并简化语法:)

【讨论】:

感谢您的回复。在我的屏幕上显示它时我仍然遇到问题我认为它与 jwt 和其他东西有关。我将用用户示例更新我的问题:)

以上是关于如何在 node.js 中设置受保护的路由?与我拥有的 userRoutes.js 相同的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在本地服务器中设置受信任的 TLS 证书?

使用 Express.js 在 Node.js 中设置路由的最佳方式

在 Node.js 中组织路由

无法在我的 Node.js Express.js 应用程序中设置路由

无法在 Node JS 中使用 JWT 访问受保护的路由

保护 Node.js 中的 API 路由