如何保护 Mern 应用程序中的路由?

时间:2021-02-06 10:25:57

标签: node.js reactjs express jwt mern

你们中的任何人都可以帮助我保护我的 getProducts, route。 (展示产品的路线) 只有在我登录后才会显示产品页面。

我正在做一个个人项目,我正在使用 udemy 课程 MERN 电子商务教程作为参考。我正在尝试练习如何保护 getProducts 路线。

import { protect } from '../middleware/authMiddleware.js'
router.route('/').get(protect, getProducts) // the error code 

当我尝试将 protect 作为路由中的第一个参数时,错误显示: 未授权无令牌!

我还尝试浏览我的 productController.js 文件,尝试访问用户:req.user._id 代码如下:

const getProducts = asyncHandler(async (req, res) => {
const products = await Product.find({ user: req.user._id })
res.json(products)
})

最后这是我的中间件文件:

import jwt from 'jsonwebtoken'
import asyncHandler from 'express-async-handler'
import User from '../models/userModel.js'

const protect = asyncHandler(async (req, res, next) => {
let token

 if (
req.headers.authorization &&
req.headers.authorization.startsWith('Bearer')
   ) {
   try {
  token = req.headers.authorization.split(' ')[1]

  const decoded = jwt.verify(token, process.env.JWT_SECRET)

  req.user = await User.findById(decoded.id).select('-password')

  next()
} catch (error) {
  console.error(error)
  res.status(401)
  throw new Error('Not authorized, token failed')
}
}
 if (!token) {
 res.status(401)
 throw new Error('Not authorized, no token')
 }
 })

 export { protect }

在 server.js 文件中我有这个!

app.use('/api/products', productRoutes)

非常感谢! :)

0 个答案:

没有答案