passeport-avec nœud-jwt-simple
Comment puis-je combiner passeport-local pour retourner un JWT jeton sur la réussite de l'authentification?
Je veux utiliser nœud-jwt-simple et en regardant passport.js je ne suis pas sûr de savoir comment aller à ce sujet.
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
Est-il possible de retourner le jeton lors de l'appel de fait() ?
Quelque chose comme ça... (juste le pseudo-code)
if(User.validCredentials(username, password)) {
var token = jwt.encode({username: username}, tokenSecret);
done(null, {token : token}); //is this possible?
}
Si non, comment puis-je retourner le jeton?
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris!
Tout d'abord vous avez besoin pour mettre en œuvre la bonne stratégie. Dans mon cas, LocalStrategy, et vous devez fournir votre logique de validation. Par exemple souci, nous allons utiliser l'un passeport local.
le vérifier de retour d'appel pour vous fournir
function(username, password, done)
prendra en charge la recherche de votre nom d'utilisateur et vérifier si le mot de passe correspond à (au-delà de la portée de la question et ma réponse)passport.js attend plusieurs morceaux pour que ça fonctionne, on est que de vous renvoyer à l'utilisateur dans la stratégie. J'ai essayé de changer la partie du code, et que c'était faux. Le rappel s'attend à ce
false
si la validation échoue et uneobject
(l'utilisateur validé) si vous avez réussi.Maintenant.... comment intégrer JWT?
Votre login route, vous aurez à gérer un succès auth ou non réussie. Et c'est ici que vous devez ajouter le JWT jeton de la création. Comme:
(n'oubliez pas de désactiver la session, sinon vous aurez à mettre en œuvre les sérialiser et désérialiser les fonctions. Et vous n'avez pas besoin de ces si vous n'êtes pas la persistance de la session, vous n'êtes pas si vous utilisez une base de jetons d'authentification)
De passeport-exemples locaux: (avec l'JWT jeton ajoutée)
Et c'est tout! Maintenant, lorsque vous appelez /login et POST nom d'utilisateur et le mot de passe (qui doit toujours être sur SSL), le premier extrait de code ci-dessus va essayer de trouver un utilisateur basé sur le nom d'utilisateur que vous avez fournies et puis vérifiez que le mot de passe correspond à (bien sûr, vous aurez besoin de le changer pour l'adapter à vos besoins).
Après que votre login route sera appelée, et de là vous pouvez prendre soin de retourner une erreur ou d'un jeton valide.
Espère que cela aidera quelqu'un. Et si j'ai fait des erreurs ou oublié quelque chose faites le moi savoir.
C'est une excellente solution, je veux juste ajouter ceci:
J'aime utiliser "express-jwt" pour valider le jeton.
btw: cet article est idéal pour apprendre à gérer le jeton dans le côté client, à l'aide Angulaire, afin de l'envoyer de nouveau à chaque requête
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
express-jwt
pour faire de l'authentification, mais la lecture par le biais de la documentation d'autres paquets commepassport-jwt
, je pense que je vais coller àexpress-jwt
. Beaucoup plus simple, beaucoup plus agréable de l'OMIVoici une chaudière de la plaque, je suis en train de travailler sur de plus particulièrement à l'aide de l'api de jetons (pas de session...pas de cette session sont mauvais, bien sûr; nous sommes à l'aide jeton d'approche):
https://github.com/roblevintennis/passport-api-tokens