使用护照承载器的自定义错误消息

我正在使用护照来保护我的API。 我有点努力去了解我应该如何发送自定义消息,以防万一错误,我希望能在这里find答案。

这是我做的:

路线(server.js):

router.route('/Applications').get(authController.BearerAuthenticated, applicationController.getApplications); 

我的护照材料(authController.js):

 Passport.use(new BearerStrategy(function(token, cb) { Token.findOne({token: token}, function(err, token){ if (err){return cb(null, false);} if (!token) { return cb(null, false); } return cb(null, token); }); })); exports.BearerAuthenticated = Passport.authenticate('bearer', {session: false}); 

我的应用程序方法(Application.js)

 exports.getApplications = function(req, res) { Application.find({userId:req.user._id}, function(err, apps) { if (err) res.send(err); res.json(apps); }); }; 

如果我的令牌有效并且承载方法返回

 return cb(null, token); 

然后我可以input我的getApplications方法。 这说得通。

事情是当令牌无效,我不input方法(也是有道理的),但我不知道一种方法来返回到客户端的自定义消息,而不是我默认获得以下消息。

 Unauthorized 

用一个错误代码返回一个Json的方法是什么,以便正确地让用户知道他的令牌已经死了或根本不存在?

谢谢你的时间。 🙂

您可以在authenticate传递callback,并从那里处理错误。 请注意,在这种情况下,您必须手动执行默认操作,如用户login等。

 exports.BearerAuthenticated = function(req, res, next){ passport.authenticate('bearer', {session: false}, function(err, user, info) { if (err) { return next(err); } //authentication error if (!user) { return res.json({error: info.message || 'Invalid Token'}) } //success req.logIn(user, function(err) { if (err) { return next(err); } return next(); }); })(req, res, next) } 
Interesting Posts