簡體   English   中英

共享的會話(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不同。 根據該線程中的注釋,這可能很重要: 如何與Socket.IO 1.x和Express 4.x共享會話?

我很樂意提供幫助! :)

實際上,這是一個CORS問題。

在客戶端,我使用以下命令連接到socket.io:

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

這觸發了跨源請求,並限制了password.socketio( https://github.com/jfromaniello/passport.socketio )的行為。 請參閱“ CORS解決方法”部分以獲取更多信息。

然后,解決方案就是遵循“解決方法”:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM