【问题标题】:Passport not showing up in session socket.io护照未显示在会话 socket.io 中
【发布时间】:2021-03-22 19:42:52
【问题描述】:

问题
我正在尝试根据类似于this 帖子的快速会话对用户进行身份验证。在 http 请求中,这就是 req.session 返回的内容,我还连接了我的 mongo 存储以保存会话,但它的行为也像套接字会话一样只返回没有会话信息的 cookie。

//user not authenticated    
Session {
 cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
 passport: {}
        }
//user authenticated
Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
  passport: {
    user: {
      _json: [Object],
      id: '76561198298457222',
    }

但是当我尝试使用后引用的护照对象使用套接字 io 进行 socket.request.session 时,不会返回。但我很确定中间件可以正常工作,否则根本就没有会话。

// user not authenticated
Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}// user should be authenticated
Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}

设置:

   var sessionMiddleware = session({
        secret: '<secret>',
        name: 'profile_session',
        resave: true,
        saveUninitialized: true,
        store: new MongoStore({ mongooseConnection: mongoose.connection })
    })
    app.use(sessionMiddleware);
io.use(function (socket, next) {
    // Wrap the express middleware
    sessionMiddleware(socket.request, {}, next);
})
io.on('connection', (socket) => {
    console.log('a user connected id:', socket.id);
    console.log(socket.request.session)

});

【问题讨论】:

  • 试试socket.handshake.session
  • 不,甚至没有安装会话

标签: node.js mongodb express session-cookies


【解决方案1】:

似乎问题是saveUninitialized 设置为true,即使没有用户登录,它也会保存会话。您也可以使用io 中的中间件并获取用户信息。

var sessionMiddleware = session({
    secret: '<secret>',
    name: 'profile_session',
    resave: true,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection })
})

const wrap = (middleware) => (socket, next) => middleware(socket.request, {}, next);
io.use(wrap(sessionMiddleware));
io.use(wrap(passport.initialize()));
io.use(wrap(passport.session()));

io.on("connection", (socket) => {
    const session = socket.request.session;
    const user = socket.request.user
    console.log(session)
    console.log(user)
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2019-06-23
    • 2017-09-30
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    相关资源
    最近更新 更多