2013-04-16 9 views
5

Sto usando i moduli connect, passport e session.socket.io nella mia applicazione. Sul connection caso di session.socket.io ricevo un errore: could not look up session by key: connect.sidConnect + SessionSocket.io + Passport: impossibile cercare la sessione con la chiave

La situazione è simile this one

Il mio codice lato server è: codice

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

Cliente:

<!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> 

Quando apro la pagina localhost:4000 posso vedere quanto segue uscita sulla console node.js:

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

PS: a causa della mia reputazione bassa Non è possibile aggiungere un nuovo tag per la discussione, ma penso che questa discussione avrà bisogno del session.socket tag .io, sarà apprezzato se qualcuno può aggiungerlo, grazie

+1

Mi piacerebbe conoscere la risposta – MrYoshiji

+1

Anche io mi piacerebbe molto! – Arthur

+1

Non riesco a risolvere questo problema :( –

risposta

0

Un modo semplice per risolvere questo problema è quello di utilizzare passport-socketio

Il seguente codice dovrebbe funzionare:

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); 
}); 
Problemi correlati