Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 连接&x2B;SessionSocket.io+;Passport:无法按密钥查找会话_Node.js_Sockets_Session_Socket.io - Fatal编程技术网

Node.js 连接&x2B;SessionSocket.io+;Passport:无法按密钥查找会话

Node.js 连接&x2B;SessionSocket.io+;Passport:无法按密钥查找会话,node.js,sockets,session,socket.io,Node.js,Sockets,Session,Socket.io,我正在应用程序中使用connect、passport和session.socket.io模块。 在session.socket.io的连接事件上,我收到一个错误:无法按键查找会话:connect.sid 情况是这样的 我的服务器端代码是: var mod_http = require('http'); var mod_connect = require('../../lib/node_modules/connect'); var mod_connectRou

我正在应用程序中使用
connect
passport
session.socket.io
模块。 在session.socket.io的
连接
事件上,我收到一个错误:
无法按键查找会话:connect.sid

情况是这样的

我的服务器端代码是:

var mod_http            = require('http');
var mod_connect         = require('../../lib/node_modules/connect');
var mod_connectRoute    = require('../../lib/node_modules/connect-route');
var mod_ejs             = require('../../lib/node_modules/ejs');
var mod_SessionSockets  = require('../../lib/node_modules/session.socket.io');
var mod_passport        = require('../../lib/node_modules/passport'), LocalStrategy = require('../../lib/node_modules/passport-local').Strategy;
var mod_fs              = require('fs');

var app = mod_connect();
var cookieParser = mod_connect.cookieParser('your secret sauce'),
sessionStore = new mod_connect.middleware.session.MemoryStore();

app.use(mod_connect.static(folder));
// Configure the app connection
app.use(cookieParser);
app.use(mod_connect.bodyParser());
app.use(mod_connect.session({ secret: 'logged' }));
app.use(mod_passport.initialize());
app.use(mod_passport.session());

app.use(mod_connectRoute(function (router) {
    router.get('/', function (req, res, next) { 
        ...
    }
}

var server  = mod_http.createServer(app), 
    io = require('../../lib/node_modules/socket.io').listen(server);
// Limit the messages shown.
io.set('log level', 2);
// Create a session.
var sessionSockets = new mod_SessionSockets(io, sessionStore, cookieParser);

// Fire when a browser install a connection. A page refresh closes the connection and creates new one.
sessionSockets.on('connection', function (err, socket, session) {
    console.log(err);
    console.log(sessionStore);
    console.log('Hello!');
}); 
server.listen(4000);
客户端代码:

<!DOCTYPE html> <!-- HTML 5 -->
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="/style.css">
        <script src="/jquery-1.9.1.js"></script>
        <meta charset="utf-8">
        <title> Test </title>
    </head>
    <body>  
        <script src="/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            socket = io.connect('http://'+location.host);
        </script>
        <script src="/functions.js"></script>
        ...
    </body>
</html>

PS:由于我的声誉不高,我无法为讨论添加新标记,但我认为此讨论将需要标记会话。socket.io,如果有人可以添加,将不胜感激,谢谢

解决此问题的简单方法是使用

下面的代码应该有效:

var passportSocketIo = require("passport.socketio");
io.use(passportSocketIo.authorize({
  cookieParser: cookieParser,
  secret:      'your secret sauce',
  store:       sessionStore,
  success:     onAuthorizeSuccess,
  fail:        onAuthorizeFail,
}));


io.sockets.on('connection', function(socket) {
  console.log(socket.request.sid);
});

我很想知道我不能解决这个问题的答案:(
var passportSocketIo = require("passport.socketio");
io.use(passportSocketIo.authorize({
  cookieParser: cookieParser,
  secret:      'your secret sauce',
  store:       sessionStore,
  success:     onAuthorizeSuccess,
  fail:        onAuthorizeFail,
}));


io.sockets.on('connection', function(socket) {
  console.log(socket.request.sid);
});