2015-10-07 15 views
3

我試圖使用會話存儲與Socket.io和passport.jsSocket.io sessionStore,store.get方法不存在

var session = require('express-session'); 
var cookieParser = require('cookie-parser'); 
var MongoStore = require('connect-mongo')(session); 
var sessionStore = session({ 
    store: new MongoStore({url: 'mongodb://localhost/RULE'}), 
    key: 'express.sid', 
    secret: 'Heisenberg' 
}); 

// Socket.io auth 
io.set('authorization', passportSocketIo.authorize({ 
    cookieParser: cookieParser, 
    key: 'express.sid', 
    secret: 'Heisenberg', 
    store: sessionStore, 
    success: onAuthorizeSuccess, 
    fail: onAuthorizeFail, 
})); 

我得到這個錯誤: TypeError: auth.store.get is not a function

所以我想這是connect-mongo商店實例的問題,但我不知道如何調試它或者問題是什麼。

回答

3

好了,問題是,我是服務於express session代替MongoStore

var session = require('express-session'); 
var cookieParser = require('cookie-parser'); 
var MongoStore = require('connect-mongo')(session); 
// sessionStore and expressSesion are now saved distinctly 
var sessionStore = new MongoStore({url: 'mongodb://localhost/RULE'}); 
var expressSession = session({ 
    store: sessionStore, 
    key: 'express.sid', 
    secret: 'ThisIsTheSecret' 
}); 

var passportSocketIo = require('passport.socketio'); 

// Load middlewares 
var morgan = require('morgan'); 

// Use middlewares 
app.use(expressSession); 

// Socket.io auth 
io.set('authorization', passportSocketIo.authorize({ 
    cookieParser: cookieParser, 
    key: 'express.sid', 
    secret: 'ThisIsTheSecret', 
    store: sessionStore, // here we pass the MongoStore, not the expressSession 
    success: onAuthorizeSuccess, 
    fail: onAuthorizeFail, 
}));