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

bot*_*tus 8 rest node.js bearer-token passport.js

我正在使用护照来保护我的API.我很难理解如果发生错误我应该如何发回自定义消息,我希望在这里找到答案.

这是我做的:

路由(server.js):

router.route('/Applications').get(authController.BearerAuthenticated, applicationController.getApplications);
Run Code Online (Sandbox Code Playgroud)

我的Passport Stuff(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});
Run Code Online (Sandbox Code Playgroud)

我的应用方法(Application.js)

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

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

return cb(null, token);
Run Code Online (Sandbox Code Playgroud)

然后我可以输入我的getApplications方法.这说得通.

问题是当令牌无效时,我不输入方法(也有意义)但我无法想出一种方法将自定义消息返回给客户端而不是默认情况下我得到的以下消息.

Unauthorized
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的时间.:)

has*_*sin 11

您可以传递回调authenticate并从中处理错误.请注意,在这种情况下,您必须手动执行默认操作,如用户登录等.更多信息请点击此处.

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)
}
Run Code Online (Sandbox Code Playgroud)