我正在用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),所以我的问题是,有没有办法让自定义回调作为中间件,不需要对路径文件进行重大重组?
干杯
答案 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);