2013-04-16 19 views
5

Tôi đang sử dụng các mô-đun connect, passportsession.socket.io trong ứng dụng của mình. Trên sự kiện connection của session.socket.io tôi nhận được một lỗi: could not look up session by key: connect.sidKết nối + SessionSocket.io + Hộ chiếu: Không thể tra cứu phiên bằng khóa

Tình hình là như this one

My mã phía máy chủ là: Mã

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

Chủ đầu tư:

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

Khi tôi mở trang localhost:4000 tôi có thể thấy như sau sản lượng trên Node.js console:

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

PS: do uy tín thấp của tôi, tôi không thể thêm một thẻ mới cho các cuộc thảo luận, nhưng tôi nghĩ rằng cuộc thảo luận này sẽ cần session.socket thẻ .io, sẽ được đánh giá cao nếu ai đó có thể thêm nó, nhờ

+1

Tôi rất muốn biết câu trả lời – MrYoshiji

+1

Tôi cũng rất thích! – Arthur

+1

Tôi không thể giải quyết vấn đề này :( –

Trả lời

0

Một cách đơn giản để giải quyết vấn đề này là sử dụng passport-socketio

Đoạn code dưới đây nên làm việc:

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