Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

login only success 1 out of 4 times even if correct username/password is provided. #521

Open
loudking opened this issue Nov 2, 2016 · 0 comments

Comments

@loudking
Copy link

loudking commented Nov 2, 2016

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'));
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant