Javascript Passport.js只重定向到失败页面,而不调用LocalStrategy
在我的Express.js小应用程序中,Passport.js一直存在一个问题:无论我在LocalStrategy中添加了什么,我总是被重定向到failureRedirect,显然甚至没有经过LocalStrategy。。。 我做错了什么?如何打印/显示最大的错误日志以跟踪执行Javascript Passport.js只重定向到失败页面,而不调用LocalStrategy,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,在我的Express.js小应用程序中,Passport.js一直存在一个问题:无论我在LocalStrategy中添加了什么,我总是被重定向到failureRedirect,显然甚至没有经过LocalStrategy。。。 我做错了什么?如何打印/显示最大的错误日志以跟踪执行 var express = require('express'), passport = require('passport'), LocalStrategy = require('passport-local'
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数据传递或以查询字符串形式传递):username
和password
。如果你没有通过这两个,Passport甚至懒得打电话给策略处理程序
通过将对象作为第一个参数传递给LocalStrategy
构造函数,可以配置字段名:
passport.use(new LocalStrategy({
usernameField : 'username',
passwordField : 'password'
}, function(username, password, done) { ... }));
谢谢,但即使它失败了参数的规范是optionnals,只有当你想更改名称时(这里是默认名称),这就是我所知道的understand@user3154516是的,它是可选的,很抱歉没有说清楚:)那么您正在使用正确的参数将
发布到/login
,并且没有调用策略处理程序?当我尝试登录时,它会转到/login,并将我重定向到故障重定向:'/error'
,而不传递策略处理程序(嗯,当我请求控制台时不会发生任何事情。登录它…)好的,它起作用了!但我不知道为什么。。。我最初的策略处理程序是passport.use(新的LocalStrategy({usernameField:'mail',passwordField:'pwd'),函数(username,password,done){console.log(“Appel de check_auth_user”);return check_auth_user(username,password,done);})代码>和我的表单字段是“邮件”和“pwd”。现在,我已经删除了字段规范,并将初始的“用户名”和“密码”放在了一起,它可以正常工作。。。非常感谢您的时间和帮助