2016-05-14 128 views
0

我試圖在與Passport.js成功連接後檢索用戶數據。共享會話(Express.js,Socket.io,Passport.js)

我使用express-session和express-socket.io-session來共享數據。這裏是我的代碼的一部分:

var expressSession = require('express-session'); 
var sharedsession = require("express-socket.io-session"); 
var MongoStore  = require('connect-mongo')(expressSession); 
var sessionStore  = new MongoStore({ 
    url: 'mongodb://127.0.0.1:27017/default', 
    ttl: 24 * 60 * 60 // = 1 day 
}); 

var session = expressSession({ 
    cookie: cookieParser, 
    secret: 'mySecret', 
    resave: false, 
    saveUninitialized: false, 
    store: sessionStore, 
}); 

app.use(session); 
app.use(passport.initialize()); 
app.use(passport.session()); 

io.use(sharedsession(session, { 
    autosave: true 
})) 
require('./app/socket-io.js')(io); 

這裏是我試圖保存一些數據(req.session.test)。

app.get('/index.html', isLoggedIn, function(req, res) { 
    req.session.test = 'Hello World !'; 
    console.log('====='); 
    console.log(req.sessionID); 
    console.log(req.session); 
    res.sendFile(root + '/index.html'); 
}); 

我注意到,裏面app.get req.sessionID()裏面io.on從client.request.sessionID不同('連接功能(...))。這可能是重要的根據評論在這個線程:How to share sessions with Socket.IO 1.x and Express 4.x?

我會很高興的任何幫助! :)

回答

1

其實,這是一個CORS問題。

在客戶端,我連接一起socket.io:

var socket = io.connect("127.0.0.1"); // with the server ip 

這引發跨源請求,並且限制passport.socketio(https://github.com/jfromaniello/passport.socketio)的行爲。查看「CORS-Workaround」部分以獲取更多信息。

然後,該解決方案是簡單地按照 「解決辦法」:

var socket = io.connect('//' + window.location.host);