Passport.jsvalidation总是失败

我的护照中间件不起作用。 当我在路由上调用passport.authenticate()以确认用户已通过身份validation时,我被redirect到失败页面。 但是,login路由按预期工作,并且我被成功redirect到正确的页面,在那里调用失败中间件redirect,并将其发送回login页面。

我有这样一个Passport战略:

module.exports = function(){ var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy var User = require('../models/user'); // used to serialize the user for the session passport.serializeUser(function(user, done) { done(null, user.id); }); // used to deserialize the user passport.deserializeUser(function(id, done) { User.getUserById(id, function(err, user) { done(err, user); }); }); passport.use(new LocalStrategy({ usernameField: "email", passwordField: "password" }, function(email, password, done){ User.getUserByEmail(email, function(err, user){ if(err) throw err; if(!user){ console.log('unknown user'); return done(null, false, {message: 'Email not recognised, please try again'}); } User.comparePassword(password, user.password, function(err, isMatch){ if(err) throw err; if(isMatch){ return done(null, user); } else { console.log('Invalid password'); return done(null, false, { message: 'Password not recognised, please try again' }); } }); }); })); }; 

login是好的使用:

 router.post('/user/login', passport.authenticate('local', { successRedirect: '/clients', failureRedirect: '/user/login', failureFlash: true } )); 

我的“客户”路线是这样的,身份validation失败,并不正确地redirect回login页面:

 router.get('/clients', passport.authenticate("local", { failureRedirect: "/user/login", failureFlash: "not verified" }), function(req, res, next) { res.locals.client = null; Client.find({}) .select("name") .select("_id") .exec(function(err, clients){ res.render('client/views/clients', { title: 'Clients', clients: clients }); }); }); 

服务器护照初始化如下所示:

 //passport app.use(passport.initialize()); app.use(passport.session()); app.use(bodyParser.urlencoded({ extended: false })); require("./user/services/passport")(passport); 

我究竟做错了什么?

正如你使用failureRedirect:'/ user / login'。 它会将您redirect到login页面。 如果您想将其redirect到其他页面,请将failureRedirect值更改为相应的路由。