2015-09-11 9 views
6

Używam paszportu, aby zabezpieczyć mój interfejs API. Staram się zrozumieć, w jaki sposób mam wysłać niestandardową wiadomość w przypadku błędu i mam nadzieję, że znajdę tutaj odpowiedź.Niestandardowy komunikat o błędzie z użyciem paszportowego nosiciela

Oto co zrobiłem:

Trasa (server.js):

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

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

Moja metoda aplikacji (Application .js)

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

Jeśli mój Token jest ważny i metoda okaziciela powrócić

return cb(null, token); 

wtedy mogę wejść na moją metodę getApplications. To ma sens.

Chodzi o to, że token nie jest prawidłowy, nie wprowadzam metody (ma sens), ale nie mogę wymyślić sposobu na zwrócenie niestandardowej wiadomości do klienta zamiast następującego komunikatu. domyślnie.

Unauthorized 

Jaki byłby sposób, aby powrócić do JSON z kodem błędu właściwie poinformować użytkownika, że ​​jego żeton jest martwe lub po prostu nie istnieje?

Dzięki za poświęcony czas. :)

Odpowiedz

8

Możesz przekazać wywołanie zwrotne w authenticate i obsługiwać tam błędy. Zauważ, że w tym przypadku musisz ręcznie wykonać domyślne operacje, takie jak logowanie użytkownika itp. Więcej informacji na ten temat znajdziesz w artykule 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) 
} 
Powiązane problemy