【问题标题】:Issue while trying to share io.request.session with passport.session尝试与 passport.session 共享 io.request.session 时出现问题
【发布时间】:2018-08-22 17:05:24
【问题描述】:

我的设置:

护照:

基本的序列化、反序列化用户:

passport.serializeUser(function(user, done) { //serialize user
    done(null, user.id);
});

passport.deserializeUser(function(id, done) { // deserialize user
    User.findById(id, function(err, user) {
        if(err) {
            console.error('There was an error accessing the records of' +
            ' user with id: ' + id);
            return done(err);
        }
        return done(null, user);
    })
});

使用本地登录。

SessionMiddleWareStore 和应用配置:

sessionStore = new mongoStore({
  mongooseConnection: mongoose.connection,
  touchAfter: 24 * 3600});
var sessionMware =  session({
    name: 'socialify.sess', store: sessionStore, secret: sessionSecret, resave: false,
    saveUninitialized: true, cookie: {maxAge: 1000 * 60 * 60 * 24},
    secret: "eknfdjsnfjsdfn852"
});
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cookieParser());

app.use(sessionMware)

io.use(function (socket, next) {
  sessionMware(socket.request, socket.request.res, next);
});

Server.js(主文件):

var httpsServer = https.createServer(options, app)
io.listen(httpsServer);
httpsServer.listen(port, function () {
    return console.log('Socialify server listening on %s at port %d in %s mode', host, port, env);
});

问题:

我试图管理如何在所有这些东西(passport、httpRequest 和 socket.io)之间共享会话 似乎 io 有一个会话,但不是好的会话。因为:

var userSockets = {};
io.on('connection', function (socket) {
  console.log(socket.request.session) // is ok but doesn't contain passport array.
  var ID = socket.request.session.passport.user; // passport.user undefined.. grrr !
  userSockets[ID] = socket;
  socket.on('disconnect', function () {
    delete userSockets[ID];
    return console.log('The client has disconnected');
  });
});

当我尝试存储所有用户 [id] 并将其导出以便共享时,我需要此 id 来访问 http 请求中的套接字。

【问题讨论】:

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


    【解决方案1】:

    发现错误...

    我将通行证 cookie 存储到 www.mydomain.com 并将 io cookie 存储到 mydomain.com,因此中间件为每一个都创建了一个存储... 现在解决了!

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多