Javascript 在express路由器的每个子端点上添加身份验证检查
我有一个快速路由器,我只希望授权用户访问该路由器的路由。我正在使用passport中间件。因此,我可以在每个端点中添加一个对Javascript 在express路由器的每个子端点上添加身份验证检查,javascript,express,express-router,Javascript,Express,Express Router,我有一个快速路由器,我只希望授权用户访问该路由器的路由。我正在使用passport中间件。因此,我可以在每个端点中添加一个对req.user的检查,如: router.get(“/”,异步(req,res)=>{ 如果(!请求用户){ 返回res.sendStatus(401).send({message:“Unauthorized”}); } //逻辑 res.sendStatus(200).send({message:“OK”}) });您可以将行为分解到“中间件”中,并通过将其传递到路由
req.user
的检查,如:
router.get(“/”,异步(req,res)=>{
如果(!请求用户){
返回res.sendStatus(401).send({message:“Unauthorized”});
}
//逻辑
res.sendStatus(200).send({message:“OK”})
});代码>您可以将行为分解到“中间件”中,并通过将其传递到路由器来为路由器的每条路由装载它。use()
:
在这种特殊情况下,在Passport one之后装载IsAuthorizedAdminware
非常重要,这样它就不会提前拒绝每个请求
中间件文档:正在工作,但我收到一个错误在发送到客户端后无法设置标题
我认为您还需要使用状态
而不是发送状态
,因为发送状态
已经发送了一个主体:ohh,非常感谢它现在已修复。我实际上是在使用status,但idk为什么我在这里写sendStatus..再一次thanks@AmanKumar,请注意,其中间件中的express“json”方法也会发送响应。所以有时候实现中间件需要一些额外的技巧,比如重写“json”方法,但身份验证不需要这些技巧
function isAuthorizedMiddleware (req, res, next) {
if (!req.user) {
return res.status(401).send({ message: "Unauthorized" });
}
next();
}
router.use(isAuthorizedMiddleware);
router.get("/", async (req, res) => {
//logic
res.status(200).send({message: "OK"})
});