2017-10-06 2 views
0

Je rencontre un problème lorsque j'essaie de me connecter sans nom d'utilisateur ou mot de passe ma fonction passport.use n'est pas appelée du tout.Passport.js n'appelant pas LocalStrategy si les champs sont vides

Ci-dessous est mon itinéraire de courrier express qui s'exécute passport.authenticate.

app.post('/login', passport.authenticate('local-login', { 
     failureRedirect: '/login', // redirect back to the login page if there is an error 
     failureFlash: true // allow flash messages 
    }) 

Et ci-dessous est mon passport.use qui devrait imprimer GOT HERE chaque fois qu'il ya une demande de poste à /login.

passport.use('local-login', new LocalStrategy({ 
     // by default, local strategy uses username and password, we will override with email 
     usernameField: 'email', 
     passwordField: 'password', 
     passReqToCallback: true // allows us to pass back the entire request to the callback 
    }, 
    function(req, email, password, done) { // callback with email and password from our form 
     // find a user whose email is the same as the forms email 
     // we are checking to see if the user trying to login already exists 
     console.log("GOT HERE"); 

Cela fonctionne bien si email et password ont un certain type de valeur. Mais je voudrais que cette fonction soit appelée même s'il n'y a pas de valeur pour email et password afin que je puisse faire la gestion des erreurs personnalisées.

Comment puis-je y parvenir?

Répondre

2

Vous pouvez ajouter une stratégie d'authentification middleware befure appelée. Quelque chose comme ceci:

app.post('/login', function(req, res, next) { 
    // do custom error handling 
    }, passport.authenticate('local-login', { 
     failureRedirect: '/login', // redirect back to the login page if there is an error 
     failureFlash: true // allow flash messages 
}) 

Et dans ce middleware, vous pouvez faire une erreur de manipulation personnalisée

+0

Est-ce vraiment la meilleure façon de le faire? Actuellement, toutes mes erreurs sont dans la fonction de passeport. Donc la séparer semble inintéressant. –

+1

Vous pouvez trouver à partir du code source ici: https://github.com/jaredhanson/passport-local/blob/f82655aa220ad7d0fcd8b114a0303d3cf94b8d06/lib/strategy.js#L71 La première chose que 'authenticate' fonction n'est de vérifier s'il y a passowrd et le champ du nom d'utilisateur. Donc, je dirais que c'est la manière la plus simple. –

+1

@CharlieFish c'est comme ça que passeport-local' fonctionne. Si vous voulez un comportement personnalisé, vous pouvez utiliser une stratégie comme ['passport-custom'] (https://github.com/mbell8903/passport- custom). – robertklep