Problèmes d’obtention de Passport.js pour authentifier l’utilisateur

Je ne parviens pas à obliger Passport à authentifier mon utilisateur. Pour une raison quelconque, la méthode passport.authenticate échoue toujours. Ce que je ne comprends pas, c’est que si j’ajoute un middleware avant l’appel du passeport, les données de l’utilisateur sont accessibles via req.user .

Des idées pour lesquelles passport.authenticate échoue?

 app.get('/app' // MY USER SHOWS UP HERE , function(req, res, next) { console.log("app.get('/app')", req.user); next(); } // DOESN'T MAKE IT PAST HERE , passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }) // NEVER MAKES IT HERE , function(req, res) { console.log('FTW!!!'); res.render('../../client/app/app') } ); 

Code d’identification

 passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' }, function(email, password, done) { console.log("Authenticating user: ", email, password); User.findOne({ email: email }, function (err, user) { if (err) return done(err); if (!user) return done(null, false, { message: 'Invalid Email' }); return user.authenticate(password, function(err, valid) { if (err) return done(err); if (!valid) return done(null, false, { message: 'Invalid Password' }); return done(null, user); }); }); } )); passport.serializeUser(function(user, done) { console.log('Serializing: ', user); done(null, user.id); }); passport.deserializeUser(function(id, done) { console.log('Deserializing: ', id); User.findById(id, function (err, user) { done(err, user); }); }); 

Inscription et redirection: notez le message [‘Informations d’identification manquantes’] après avoir trouvé l’utilisateur

 // SIGN UP Authenticating user: [email protected] foobar User.authenticate(): Comparing... // user.authenticate() Compare Complete... true // bcrypt compare Serializing: { email: '[email protected]', password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW', _id: 52160e247d0aa8e328000001, __v: 0, createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) } POST /users 302 185ms - 64b Deserializing: 52160e247d0aa8e328000001 Found User: { email: '[email protected]', password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW', _id: 52160e247d0aa8e328000001, __v: 0, createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) } // MY TEST MIDDLEWARE app.get('/app') { email: '[email protected]', password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW', _id: 52160e247d0aa8e328000001, __v: 0, createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) } GET /app 302 6ms - 68b Deserializing: 52160e247d0aa8e328000001 Found User: { email: '[email protected]', password: '$2a$10$TJcvr4wtgs6DFaNnyQSLt.v5GLbt8PIi.oOlgqZpvghveKEPEcroW', _id: 52160e247d0aa8e328000001, __v: 0, createdAt: Thu Aug 22 2013 07:12:04 GMT-0600 (MDT) } [ 'Missing credentials' ] GET /login 200 85ms - 3.65kb 

Comment l’authentification du passeport échoue-t-elle? Est-ce que cela jette une erreur, ou l’application se bloque?

Essayez d’utiliser req.isAuthenticated () pour vérifier si l’utilisateur est connecté. J’utilise passport.authenticate uniquement lors de la connexion lorsque les informations d’identification de connexion sont fournies dans une demande de publication http.

Donc, sur / application seulement

 if(req.isAuthenticated()) { console.log('user logged in', req.user); next(); } else { console.log('user not logged in'); } 

Et sur / app / login, vous pouvez utiliser le code que vous avez déjà. Vous êtes probablement déjà connecté. Essayez de supprimer le cookie. Après cela, l’object utilisateur n’est probablement plus consigné sur console.log (req.user).

En plus de cela, tout votre code semble correct. Donc, si cela ne fonctionne pas, essayez de supprimer votre code. Nous ne soaps pas quel code vous avez dans user.authenticate. Est-ce que cette fonction fonctionne?

Cordialement