共享会话(Express.js、Socket.io、Passport.js)
Shared sessions (Express.js, Socket.io, Passport.js)
我正在尝试在与 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('connection, function(...)) 中的 client.request.sessionID。根据此线程中的评论,这可能很重要:How to share sessions with Socket.IO 1.x and Express 4.x?
我很乐意提供任何帮助! :)
实际上,这是一个 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" 部分了解更多信息。
然后,解决方案就是遵循 "workaround" :
var socket = io.connect('//' + window.location.host);
我正在尝试在与 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('connection, function(...)) 中的 client.request.sessionID。根据此线程中的评论,这可能很重要:How to share sessions with Socket.IO 1.x and Express 4.x?
我很乐意提供任何帮助! :)
实际上,这是一个 CORS 问题。
在客户端,我使用 :
连接到 socket.iovar socket = io.connect("127.0.0.1"); // with the server ip
这触发了跨源请求,并限制了 passport.socketio (https://github.com/jfromaniello/passport.socketio) 的行为。查看 "CORS-Workaround" 部分了解更多信息。
然后,解决方案就是遵循 "workaround" :
var socket = io.connect('//' + window.location.host);