У меня есть приложение, использующее паспорт .js для входа в систему через facebook, и я пытаюсь использовать express-mysql-session для сохранения своих состояний входа. Если я не включаю код экспресс-mysql-сеанса, функции serialization serialsUser и deserializeUser паспорта отлично подходят... однако, когда я не комментирую код, который пытается сохранить их сеанс с помощью выражения-mysql-session, функция deserializeUser doesn 't получить удар, и пользователь никогда не будет правильно зарегистрирован.
server.js файл
var express      = require('express');
var mysql        = require('mysql');
var passport     = require('passport');
var session      = require('express-session');
var MySQLStore   = require('express-mysql-session')(session);
if (typeof process.env.OPENSHIFT_MYSQL_DB_HOST === "undefined"){
    var options = {
        host     : 'localhost',
        port     : '3307',
        user     : 'user',
        password : 'password',
        database : 'database',
        socketpath: '/var/run/mysqld/mysqld.sock'
    }
} else { 
    var options = {
        host     : process.env.OPENSHIFT_MYSQL_DB_HOST,
        port     : process.env.OPENSHIFT_MYSQL_DB_PORT,
        user     : process.env.OPENSHIFT_MYSQL_DB_USERNAME,
        password : process.env.OPENSHIFT_MYSQL_DB_PASSWORD,
        database : process.env.OPENSHIFT_APP_NAME,
        socket   : process.env.OPENSHIFT_MYSQL_DB_SOCKET
    }
};    
var connection = mysql.createConnection(options);
var sessionStore = new MySQLStore({
    checkExpirationInterval: 900000,// How frequently expired sessions will be cleared; milliseconds.
    expiration: 86400000,// The maximum age of a valid session; milliseconds.
    createDatabaseTable: false,// Whether or not to create the sessions database table, if one does not already exist.
    connectionLimit: 1,
    schema: {
        tableName: 'LoginRequests',
        columnNames: {
            session_id: 'loginID',
            expires: 'expires',
            data:'data'
        }
    }
}, connection);
 self.initializeServer = function() {
        self.app = module.exports = express();
        self.app.configure(function() {
            self.app.set('views', __dirname + '/public');
            self.app.set('view engine', 'html');
            self.app.engine('html', require('hogan-express'));
            self.app.enable('view cache');
            self.app.use(express.favicon());
            self.app.use(express.logger('dev'));
            self.app.use(express.bodyParser());
            self.app.use(express.methodOverride());
            self.app.use(express.cookieParser('secret'));
            self.app.use(session({
                key: 'session_cookie_name',
                secret: 'secret',
                cookie: {maxAge: 3600000, secure:false},
                store: sessionStore,
                resave: false,
                saveUninitialized: false
            }));
            // required for passport
            self.app.use(passport.initialize());
            self.app.use(passport.session()); // persistent login sessions
            self.app.use(express.static(path.join(__dirname, 'public')));
            self.app.use('/public',express.static(__dirname, '/public'));
            self.app.use(self.app.router);
            //self.app.use(require('stylus').middleware(__dirname + '/public'));
        });
    require('./routes/site.js');  
    require('./config/passport.js')(passport); // pass passport for configuration 
    }
Итак, если я прокомментирую опцию "store" в вышеперечисленном объекте сеанса, паспортные функции попадут. Если я оставлю эту строку без комментариев, функция deserializeUser не попадет.
Паспортные функции
passport.serializeUser(function(user, done) {
        console.log('you have been serialized!');
            done(null, user.id);
    });
    // used to deserialize the user
    passport.deserializeUser(function(id, done) {
        console.log('you have been deserialized!');
        connection.query("SELECT * FROM Users WHERE id = "+id,function(err,rows){
            done(err, rows[0]);
        });
    });
ИЗМЕНИТЬ
Mor Paz предположил, что я включаю некоторые из журналов, когда я запускаю свой сервер с модулем отладки. Ниже приведены журналы справа и сразу после того, как пользователь сериализуется. Пользователь должен быть десериализован в какой-то момент рядом с этим, но никогда не будет.
GET /auth/facebook 302 81ms - 412b
express-mysql-session:log Getting session: oNcJ4UapxCY_zKOyfSBTUWaVhaNZuFRq +356ms
you are a user!
you have been serialized!
  express-mysql-session:log Setting session: tgRPY-Mb1VDP2zaSMOFhlf_IWFhVpTia +798ms
  express-mysql-session:log Getting session: tgRPY-Mb1VDP2zaSMOFhlf_IWFhVpTia +6ms
GET /auth/facebook/callback?    code=AQCWPvA5ZRMYoTueW6_wWU49Up5ggjW68ufOtiYkU5IzhRjSNyyWnzlQVprgQo_uubQkEVvNI0yo53ET3cWBnDAHUGmAXPBy_ITEmC-biE2KEGEr0iCm_cqjuG90nnePY-k9U2oFUbX2kvLgMeM0kZ-094EHiU_NJjmAJNj6mzTkSE47935RhJy0Tba_sYS88_C0N3kn5f5kcoTC4KsgW1gBHWWJAwZ68Lj94ffVe2hN97580CtzEpJa0wwQHwTBYfmjQ0NfUdx07m4rXW9R7PR06aHDcUDrYqR9Kb0LWq4sZLbQjV5rI7gzkWG-huhq7IY 302 825ms - 72b
  express-mysql-session:log Setting session: Xo9OjfmJzTFp1CSF6srLi_UyxTCLg-EI +56ms
  express-mysql-session:log Getting session: Xo9OjfmJzTFp1CSF6srLi_UyxTCLg-EI +23ms
  express-mysql-session:log Getting session: Xo9OjfmJzTFp1CSF6srLi_UyxTCLg-EI +2ms
GET /profile 200 84ms - 4.22kb