2013-04-16 23 views
5

查找會話我用我的應用程序connectpassportsession.socket.io模塊。 在connection事件session.socket.io的我收到一個錯誤:could not look up session by key: connect.sid連接+ SessionSocket.io +護照:無法通過關鍵

情況是這樣this one

我的服務器端代碼:

var mod_http   = require('http'); 
var mod_connect   = require('../../lib/node_modules/connect'); 
var mod_connectRoute = require('../../lib/node_modules/connect-route'); 
var mod_ejs    = require('../../lib/node_modules/ejs'); 
var mod_SessionSockets = require('../../lib/node_modules/session.socket.io'); 
var mod_passport  = require('../../lib/node_modules/passport'), LocalStrategy = require('../../lib/node_modules/passport-local').Strategy; 
var mod_fs    = require('fs'); 

var app = mod_connect(); 
var cookieParser = mod_connect.cookieParser('your secret sauce'), 
sessionStore = new mod_connect.middleware.session.MemoryStore(); 

app.use(mod_connect.static(folder)); 
// Configure the app connection 
app.use(cookieParser); 
app.use(mod_connect.bodyParser()); 
app.use(mod_connect.session({ secret: 'logged' })); 
app.use(mod_passport.initialize()); 
app.use(mod_passport.session()); 

app.use(mod_connectRoute(function (router) { 
    router.get('/', function (req, res, next) { 
     ... 
    } 
} 

var server = mod_http.createServer(app), 
    io = require('../../lib/node_modules/socket.io').listen(server); 
// Limit the messages shown. 
io.set('log level', 2); 
// Create a session. 
var sessionSockets = new mod_SessionSockets(io, sessionStore, cookieParser); 

// Fire when a browser install a connection. A page refresh closes the connection and creates new one. 
sessionSockets.on('connection', function (err, socket, session) { 
    console.log(err); 
    console.log(sessionStore); 
    console.log('Hello!'); 
}); 
server.listen(4000); 

客戶端代碼:

<!DOCTYPE html> <!-- HTML 5 --> 
<html> 
    <head> 
     <link rel="stylesheet" type="text/css" href="/style.css"> 
     <script src="/jquery-1.9.1.js"></script> 
     <meta charset="utf-8"> 
     <title> Test </title> 
    </head> 
    <body> 
     <script src="/socket.io/socket.io.js"></script> 
     <script type="text/javascript"> 
      socket = io.connect('http://'+location.host); 
     </script> 
     <script src="/functions.js"></script> 
     ... 
    </body> 
</html> 

當我打開localhost:4000頁面時,可以看到以下內容Node.js的控制檯輸出:

[Error: could not look up session by key: connect.sid] 
{ sessions: {} } 
Hello! 

PS:由於我的低信譽,我不能添加新標籤的討論,但我認爲這種討論將所需要的標籤session.socket .IO,可以理解的,如果有人可以將其添加,謝謝

+1

我很想知道答案 – MrYoshiji

+1

我也愛! – Arthur

+1

我無法解決這個問題:( –

回答

0

一個簡單的方法來解決這個問題的方法是使用passport-socketio

下面的代碼應工作:

var passportSocketIo = require("passport.socketio"); 
io.use(passportSocketIo.authorize({ 
    cookieParser: cookieParser, 
    secret:  'your secret sauce', 
    store:  sessionStore, 
    success:  onAuthorizeSuccess, 
    fail:  onAuthorizeFail, 
})); 


io.sockets.on('connection', function(socket) { 
    console.log(socket.request.sid); 
});