Passport.js只redirect到失败页面,而不调用LocalStrategy

在我的Express.js小应用程序中,Passport.js存在持久性问题:无论我放在LocalStrategy中,我总是被redirect到failureRedirect,显然没有通过LocalStrategy传递…我错了什么? 我怎样才能打印/显示最大的错误日志来跟踪执行?

var express = require('express'), passport = require('passport'), LocalStrategy = require('passport-local').Strategy; http = require('http'), path = require('path'), mysql = require('mysql'), flash = require('connect-flash'); var app = express(); // SQL connexion var sqlInfo = { host: 'localhost', user: 'root', password: '', database: 'mex' }; global.client = mysql.createConnection(sqlInfo); client.connect(function(err) { if(err) console.log(err); }); app.configure(function(){ app.set('views', __dirname+'/views'); app.set('port', process.env.PORT || 85); //app.engine('ejs', engine); app.use(express.static('public')); app.use(express.cookieParser()); app.use(express.bodyParser()); // 1 - Session express app.use(express.session({ secret: 'secretpass' })); // 2 - Init et session Passeport app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); app.use(express.logger()); app.use(app.router); }); // Simple logger app.use(function(req, res, next){ console.log('%s %s', req.method, req.url); next(); passport.use(new LocalStrategy( function(username, password, done) { console.log("localstrategy ---"); var user = {username: 'w@j.fr', password: 'pwd'}; return done(null, user); })); passport.serializeUser(function(user, done) { // JUST 4 TEST done(null, user); }); passport.deserializeUser(function(user, done) { // JUST 4 TEST done(null, user); }); // Home app.get('/', function(req, res){ //check user session value, is logged in if(req.user) res.render('menu_log.ejs', function(err, html){ var data = { title: 'Home', menu: html //req.user['Prenom'] -- à afficher }; res.render('index.ejs', data); console.log("index logué"); }); else res.render('menu_nolog.ejs', function(err, html){ var data = { title: 'Home', menu: html }; res.render('index.ejs', data); console.log("index PAS logué"); }); }); // Passport's authentication app.post('/login', passport.authenticate('local', { successRedirect: '/', successFlash: 'Bienvenue !', failureRedirect: '/wrong', failureFlash: "Email ou mot de passe incorrect." }) ); app.get('/logout', function(req, res){ req.logout(); res.redirect('/'); }) .get('/inscription', function(req, res){ res.render('menu_nolog.ejs', function(err, html){ var data = { title: 'Register', menu: html }; res.render('inscription.ejs', data); }); }); http.createServer(app).listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); }); 

LocalStrategy需要两个参数(作为POST数据或查询string传递)存在: usernamepassword 。 如果你没有通过这两个,护照甚至不打扰策略处理程序。

字段名称可以通过将对象作为第一个parameter passing给LocalStrategy构造函数来configuration:

 passport.use(new LocalStrategy({ usernameField : 'username', passwordField : 'password' }, function(username, password, done) { ... }));