Mensagem de erro personalizada usando o portador de passaporte

Estou usando o passaporte para proteger minha API. Eu meio que luto para entender como devo enviar uma mensagem personalizada em caso de erro e espero encontrar uma resposta aqui.

Aqui está o que eu fiz:

Uma rota (server.js):

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

My 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}); 

Meu método de aplicativo (Application.js)

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

Se meu token é válido e o método Bearer retorna

 return cb(null, token); 

Então eu posso entrar no meu método getApplications. Faz sentido.

A coisa é quando o token não é válido, eu não entro no método (faz sentido também), mas não consigo descobrir uma maneira de retornar uma mensagem personalizada para o cliente em vez da seguinte mensagem recebo por padrão.

 Unauthorized 

Qual seria uma maneira de retornar um Json com um código de erro para informar corretamente ao usuário que seu token está morto ou simplesmente não existe?

Obrigado pelo seu tempo. 🙂

Você pode passar um retorno de chamada em authenticate e manipular erros de lá. Observe que, nesse caso, você precisa executar manualmente as operações padrão, como login de usuário, etc. Mais aqui .

 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) }