2016-05-14 6 views
0

Passport.jsとの接続が成功した後にユーザーデータを取得しようとしています。共有セッション(Express.js、Socket.io、Passport.js)

データを共有するためにexpress-sessionとexpress-socket.io-sessionを使用します。ここに私のコードの一部です:私はいくつかのデータ(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('/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回避策」を参照してください。

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

次いで、この溶液を "回避策" に従うことを単にでした

関連する問題