2015-09-11 11 views
6

Sto utilizzando il passaporto per proteggere la mia API. Mi sforzo di capire come dovrei inviare un messaggio personalizzato in caso di errore e spero di trovare una risposta qui.Messaggio di errore personalizzato utilizzando il portatore del passaporto

Ecco quello che ho fatto:

Un percorso (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}); 

Il mio metodo di applicazione (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 il mio token è valido e il metodo portatore tornare

return cb(null, token); 

allora posso entrare nel mio metodo getApplications. Ha senso.

La cosa è quando il token non è valido, non inserisco il metodo (ha senso anche) ma non riesco a capire un modo per restituire un messaggio personalizzato al client invece del seguente messaggio che ottengo per impostazione predefinita.

Unauthorized 

Quale potrebbe essere un modo per restituire un JSON con un codice di errore di lasciare che correttamente all'utente di sapere che il suo token è morto o semplicemente non esiste?

Grazie per il tuo tempo. :)

risposta

8

È possibile passare una richiamata in authenticate e gestire gli errori da lì. Si noti che in questo caso è necessario eseguire manualmente le operazioni predefinite come login utente ecc. Altro su di esso in here.

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