passport.socketio 一直说 - 与 socket.io 的连接失败:找不到会话

passport.socketio keeps saying - failed connection to socket.io: No session found

我正在尝试访问 socket.io 中的 req.user 之类的会话对象,以便我可以使用它做一些事情,我正在使用 passport.socket.io 库来执行此操作。但是现在的问题是我不断收到 failed connection to socket.io: No session found.

这是代码

    var express = require('express');
    var session = require('express-session');
    var cookieParser = require('cookie-parser');
    var MongoStore = require('connect-mongo/es5')(session);
    var passport = require('passport');
    var passportSocketIo = require("passport.socketio");

    var config = require('./config/config');


    var sessionStore = new MongoStore({ url: config.database, autoReconnect: true });
    var app = express();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);


    app.use(cookieParser());
    app.use(session({
      resave: true,
      saveUninitialized: true,
      secret: config.secret,
      store: sessionStore
    }));
    app.use(passport.initialize());
    app.use(passport.session());

    io.use(passportSocketIo.authorize({
      cookieParser: cookieParser,       
      key:          express.sid,   // Not really sure how to get this key?
      secret:       config.secret,  
      store:        sessionStore,        
      success:      onAuthorizeSuccess,  
      fail:         onAuthorizeFail,     
    }));

    function onAuthorizeSuccess(data, accept){
      console.log('successful connection to socket.io');
      accept(null, true);  
    }

    function onAuthorizeFail(data, message, error, accept){
      if(error)
        throw new Error(message);
      console.log('failed connection to socket.io:', message);


      accept(null, false);
      if(error)
        accept(new Error(message));
    }

 io.connect('connection', function(socket) {
     console.log("Something Here");
 });


 http.listen(3000);

保留运行这个功能是因为passport与socket.ioonAuthorizeFail的握手失败。我该如何解决这个问题?

我浏览了 express-session 文档后,发现密钥有问题。

我已经通过更改

解决了这个问题
express.sid => 'connect.sid'

io.use(passportSocketIo.authorize({
   key: 'connect.sid'     
 }));

好像快递默认会提供'connect.sid'.