你们中的任何人都可以帮助我保护我的 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)
非常感谢! :)