2015-09-11 8 views
6

Ich benutze Reisepass, um meine API zu sichern. Ich bemühe mich irgendwie zu verstehen, wie ich im Fehlerfall benutzerdefinierte Nachrichten zurücksenden soll und ich hoffe, hier eine Antwort zu finden. HierBenutzerdefinierte Fehlermeldung mit Pass Bearer

ist das, was ich tat:

Eine Route (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}); 

Meine Anwendungsmethode (Application .js)

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

Wenn mein Token gültig ist und die Bearer-Methode gibt

return cb(null, token); 

Dann lese ich meine GetApplications Methode eingeben. Es macht Sinn.

Die Sache ist, wenn das Token nicht gültig ist, gebe ich die Methode nicht ein (macht auch Sinn), aber ich kann nicht eine Möglichkeit finden, eine benutzerdefinierte Nachricht an den Client anstelle der folgenden Nachricht zurückzugeben, die ich bekomme standardmäßig.

Unauthorized 

Was für einen Weg, um einen Json mit einem Fehlercode zurück der Benutzer richtig zu informieren, dass seine Token sind tot oder einfach nicht vorhanden wäre?

Vielen Dank für Ihre Zeit. :)

Antwort

8

Sie können einen Rückruf in authenticate übergeben und Fehler von dort behandeln. Beachten Sie, dass Sie in diesem Fall die Standardfunktionen wie Benutzeranmeldung usw. manuell ausführen müssen. Weitere Informationen hierzu finden Sie unter 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) 
}