对于快速路由,节点护照自定义回调是否可以作为中间件?

时间:2016-03-14 06:16:28

标签: node.js express passport.js jwt

我正在用node.js创建一个简单的Rest Api,并且我用jwt令牌保护它,我已经设置了护照和passport-jwt来验证哪个工作正常,如果jwt令牌有错误或者它不存在,护照将发送401和正文“未经授权”。我知道如何更改路由的错误,以通过执行以下操作发回我想要的自定义错误消息;

router.route('/test')
    .put(function(req, res, next) {
    passport.authenticate('jwt', { session: false }, function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.send("Custom Unauthorised").end();  }
        return res.send("Test Route Accessed").end();
    })(req, res, next);
});

我有大约20条路线,我将它们命名为以下类似的路线;

router.route('/books/:id/authors').get(passport.authenticate('jwt', { session: false }), myRoutes.books.authors);

现在您将注意到我将资源特定路由存储在他们自己的文件中(即myRoutes.books),所以我的问题是,有没有办法让自定义回调作为中间件,不需要对路径文件进行重大重组?

干杯

1 个答案:

答案 0 :(得分:7)

我希望我能正确理解你的问题。

创建一个函数,让它称之为jwt

function jwt (req, res, next){
    passport.authenticate('jwt', { session: false }, function(err, user, info) { 
        if (err) { return next(err); } 
        if (!user) { return res.send("Custom Unauthorised").end(); } 
        // edit as per comment
        //return res.send("Test Route Accessed").end();
        req.user = user;   // Forward user information to the next middleware
        next();
    })(req, res, next);
}

并将其用作中间件

router.get('/bla', jwt, handleBla);