Open
Description
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
Labels
No labels