【问题标题】:node.js + express.js + socket.io authorization: no cookienode.js + express.js + socket.io 授权:没有cookie
【发布时间】:2011-12-23 05:33:43
【问题描述】:

我无法从我的 socket.io 授权中获取“cookie”数据。

io.configure(function() {
io.set('authorization', function (data, cb) {
   console.log(data);
   // data.headers.cookie <-- should be the cookie
});
});

所以它打印的是:

{ headers: 
 { host: 'frisr.dk:1000',
 connection: 'keep-alive',
 origin: 'http://frisr.dk',
 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2',
 accept: '*/*',
 referer: 'http://frisr.dk/',
 'accept-encoding': 'gzip,deflate,sdch',
 'accept-language': 'da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4',
 'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' },
address: { address: '80.71.135.24', port: 53549 },
time: 'Sun Nov 06 2011 22:34:12 GMT+0000 (UTC)',
query: { t: '1320610986125' },
url: '/socket.io/1/?t=1320610986125',
xdomain: true,
secure: undefined,
issued: 1320618852796 }

您可以在此处查看代码: http://frisr.dk

为什么 cookie 不可用?

【问题讨论】:

  • 因为data.headers中没有cookie属性...
  • 我如何得到它:D
  • 您解决了这个问题吗?我也有类似的问题。
  • 似乎是 socket.io 中的一个错误。希望他们会在未来的版本中修复它。

标签: cookies node.js socket.io


【解决方案1】:

查看this question 关于socket.io 和身份验证的信息。其实这个话题真的有a bunch的问题:)

【讨论】:

  • 但是我所做的应该工作。它可以在我拥有的另一台服务器上运行,但我不知道为什么它不能在这台服务器上运行。
【解决方案2】:

你看了吗,没有任何“cookie”标题,类似

cookie: sid=whatsoever

我猜你的 app.js 配置文件有问题。如果您没有在应用根文件夹中使用命令 $ express --sessions myApp 创建应用,则标题中不会有任何 cookie。

为确保您有 cookie,请尝试查看您的 app.js 配置:

app.configure(function(){
  app.set('port', process.env.PORT || 8080);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  //this snippet here
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  //end of snippet
  app.use(app.router);
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
});

【讨论】:

    【解决方案3】:

    在握手请求期间没有设置 Cookie。 可能已经为不同的服务器/域设置了 cookie,这就是为什么在您的第二台服务器上它存在于您的数据对象中。检查是否在 firebug ot smth 中为此域设置了 cookie。

    【讨论】:

      【解决方案4】:

      看看你的主人。您的客户端连接到什么?我也遇到了 expressjs 3.* 和 Socket.io 的问题,但我发出我的客户端连接为:

      io.connect(127.0.0.1);

      代替

      io.connect('localhost');

      现在将可爱的新解析例程组合在一起。

      https://groups.google.com/forum/?fromgroups=#!topic/express-js/II3eIM9HHQY

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        相关资源
        最近更新 更多