8000 login only success 1 out of 4 times even if correct username/password is provided. · Issue #521 · jaredhanson/passport · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
login only success 1 out of 4 times even if correct username/password is provided. #521
Open
@loudking

Description

@loudking

Hello, I encountered this problem as mentioned in the title. Any help is appreciated. My logging shows:

username=jack password=secret
login success
login
serializeUser={"id":1,"username":"jack","password":"secret","name":"Jack"}
username=jack password=secret
login success
login
serializeUser={"id":1,"username":"jack","password":"secret","name":"Jack"}
username=jack password=secret
login success
login
serializeUser={"id":1,"username":"jack","password":"secret","name":"Jack"}
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
username=jack password=secret
login success
login
serializeUser={"id":1,"username":"jack","password":"secret","name":"Jack"}
deserializeUser=1
user=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
deserializeUser=1
shared session
Session {
  cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true },
  __lastAccess: 1478062339881,
  passport: { user: 1, name: 'Jack' } }
deserializeUser=1

My code is:

var file_log='../log/log.txt';
var file_property='../backend/config.txt';
var default_port=2334;

var log4js = require('log4js'); 
log4js.configure({
  "appenders": [{
    "type": "file",
    "filename": file_log,
    "category": "recon-frontend",
    "layout": {
      "type": "pattern",
      "pattern": "%d{yyyy-MM-dd hh:mm:ss.SSS} %m"
    }
  }
]});
var logger = log4js.getLogger('recon-frontend');
logger.setLevel('info');

var arg = process.argv.slice(2);
if(arg.length) {
    arg = parseInt(arg);
}
else {
    arg = default_port;
}
var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;
var records = [
    { id: 1, username: 'jack', password: 'secret', name: 'Jack'}
  , { id: 2, username: 'jill', password: 'birthday', name: 'Jill'}
];
passport.use(new LocalStrategy(
  function(username, password, cb) {
    console.log("username="+username+" password="+password);
    findByUsername(username, function(err, user) {
      if (err) { console.log("err"); return cb(err); }
      if (!user) { console.log("user not found"); return cb(null, false); }
      if (user.password != password) { console.log("password not match"); return cb(null, false); }
      console.log("login success");
      return cb(null, user);
    });
  }
));
passport.serializeUser(function(user, cb) {
    console.log("serializeUser="+JSON.stringify(user));
    cb(null, user.id);
});
passport.deserializeUser(function(id, cb) {
    console.log("deserializeUser="+id);
    findById(id, function (err, user) {
      if (err) { return cb(err); }
      cb(null, user);
    });
});
var PropertiesReader = require('properties-reader');
var properties = PropertiesReader(file_property);
var version = properties.get("version");

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var session = require('express-session');
var FileStore = require('session-file-store')(session);
var session_store = new FileStore();
 
var id_backend;
var id_admin;
var sessionMiddleware = session({
    store            : session_store,
    secret           : 'Some Key!',
    resave           : true,
    saveUninitialized: true
});
app.use(require('cookie-parser')('Some Key!'));
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(sessionMiddleware);
app.use(passport.initialize());
app.use(passport.session());
app.use('/js',      express.static(__dirname + '/js'));
app.use('/css',     express.static(__dirname + '/css'));
app.use('/image',   express.static(__dirname + '/image'));
app.use('/fonts',   express.static(__dirname + '/fonts'));
app.use('/download',express.static(__dirname + '/download'));

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
}).get('/admin', function(req, res){
    res.sendFile(__dirname + '/admin.html');
}).get('/home',
  require('connect-ensure-login').ensureLoggedIn('/'),
  function(req, res){
    console.log("user="+req.session.passport.user);
    req.session.passport.name=records[req.session.passport.user-1].name;
    res.sendFile(__dirname + '/home.html');
}).post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, info){
        if(err) {console.log("err"); return next(err);}
        if(!user) {console.log("no user"); return res.redirect('/');}
        console.log('login');
        req.logIn(user, function (err, user, info) { // <-- Log user in
            if(err) {console.log('login err'); return next(err);}
            return res.redirect('/home'); 
        });
    })(req, res, next);
  //  res.redirect('/home');
//  passport.authenticate('local', {successRedirect: '/home', failureRedirect: '/'})
}).get('/logout', function(req, res){
  req.session.destroy(function(err) {
    if(err) {
      logger.error(err);
    }
    else {
      res.clearCookie('connect.sid');
      res.redirect('/');
    }
  });
});
io.use(function(socket, next)
{
    console.log('shared session');
    sessionMiddleware(socket.request, {}, next);
});
io.on('connection', function(socket){
    logger.info("new client id="+socket.id);

    console.log(socket.request.session);  

    });

    if(!!id_backend && id_backend != socket.id) {
        socket.emit('backend_up');
    }
});

process.on('SIGINT', function() {
    logger.info("Recon frontend terminated.");
    process.exit();
}).setMaxListeners(0);

http.listen(arg, function(){
    logger.info("Recon frontend v"+version+" starts listening to port "+arg);
});

function findByUsername(username, cb)
{
    for (var i = 0, len = records.length; i < len; i++) {
        var record = records[i];
        if (record.username === username) {
            return cb(null, record);
        }
    }
    return cb(null, null);
}
function findById(id, cb)
{
    var idx = id - 1;
    if (records[idx]) {
        cb(null, records[idx]);
    } else {
        cb(new Error('User ' + id + ' does not exist'));
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0