简体   繁体   English

Passport.js仅重定向到失败页面,而无需调用LocalStrategy

[英]Passport.js only redirect to failure page, without calling the LocalStrategy

I have a persistent problem with Passport.js in my Express.js small application : whatever I put in the LocalStrategy, I'm always redirected to the failureRedirect, apparently without even pass by the LocalStrategy... What did I wrong ? 我在Express.js小型应用程序中一直存在Passport.js的问题:无论我把它放在LocalStrategy中,我总是被重定向到failureRedirect,显然没有通过LocalStrategy ...我怎么了? And how can I print/display the largest error log to follow the execution ? 以及如何打印/显示最大的错误日志以跟随执行?

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 requires two parameters (either passed as POST data, or in a query string) to exist: username and password . LocalStrategy需要两个参数(以POST数据形式传递或以查询字符串形式)存在: usernamepassword If you're not passing those two, Passport doesn't even bother to call the strategy handler. 如果您没有通过这两个参数,Passport甚至不会费心调用策略处理程序。

The field names are configurable by passing an object as first argument to the LocalStrategy constructor: 可以通过将对象作为第一个参数传递给LocalStrategy构造函数来配置字段名称:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM