Node.js Passport未显示在session socket.io中

Node.js Passport未显示在session socket.io中,node.js,mongodb,express,session-cookies,Node.js,Mongodb,Express,Session Cookies,问题 我正在尝试根据类似于post的express会话对用户进行身份验证。在http请求中,这是req.session返回的内容。我还连接了我的mongo存储来保存会话,但它的行为也类似于套接字会话,只返回cookie而不返回会话信息 //user not authenticated Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, passport: {}

问题
我正在尝试根据类似于post的express会话对用户进行身份验证。在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',
    }
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)
})
但是,当我尝试使用后引用passport对象使用socket 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)

});
var sessionMiddleware=会话({
秘密:'',
名称:'profile_session',
雷萨夫:是的,
saveUninitialized:true,
存储区:新MongoStore({mongooseConnection:mongoose.connection})
})
应用程序使用(sessionMiddleware);
io.use(函数(套接字,下一个){
//包装express中间件
sessionMiddleware(socket.request,{},next);
})
io.on('连接',(套接字)=>{
log('a user connected id:',socket.id);
console.log(socket.request.session)
});

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

//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',
    }
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)
})
var sessionMiddleware=会话({
秘密:'',
名称:'profile_session',
雷萨夫:是的,
saveUninitialized:false,
存储区:新MongoStore({mongooseConnection:mongoose.connection})
})
const wrap=(中间件)=>(socket,next)=>中间件(socket.request,{},next);
io.use(wrap(sessionMiddleware));
io.use(wrap(passport.initialize());
io.use(wrap(passport.session());
io.on(“连接”,“插座)=>{
const session=socket.request.session;
const user=socket.request.user
console.log(会话)
console.log(用户)
})

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

//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',
    }
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)
})
var sessionMiddleware=会话({
秘密:'',
名称:'profile_session',
雷萨夫:是的,
saveUninitialized:false,
存储区:新MongoStore({mongooseConnection:mongoose.connection})
})
const wrap=(中间件)=>(socket,next)=>中间件(socket.request,{},next);
io.use(wrap(sessionMiddleware));
io.use(wrap(passport.initialize());
io.use(wrap(passport.session());
io.on(“连接”,“插座)=>{
const session=socket.request.session;
const user=socket.request.user
console.log(会话)
console.log(用户)
})

try
socket.handshake.session
Nope,此处未安装会话try
socket.handshake.session
Nope,此处未安装会话