共享会话(Express.js,Socket.io,Passport.js)

时间:2016-05-14 20:47:57

标签: node.js express socket.io passport.js

我尝试在与Passport.js成功连接后检索用户数据。

我使用express-session和express-socket.io-session来共享数据。这是我的代码的一部分:

to_json

这是我尝试保存一些数据的地方(req.session.test)。

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

我注意到app.get()中的req.sessionID与io.on('connection,function(...))中的client.request.sessionID不同。根据此帖子中的评论,这可能很重要:How to share sessions with Socket.IO 1.x and Express 4.x?

我很乐意为您提供帮助! :)

1 个答案:

答案 0 :(得分: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);