node.js + express.js + socket.io 授权:没有cookie
Posted
技术标签:
【中文标题】node.js + express.js + socket.io 授权:没有cookie【英文标题】:node.js + express.js + socket.io authorization: no 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 中的一个错误。希望他们会在未来的版本中修复它。
【参考方案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
【讨论】:
以上是关于node.js + express.js + socket.io 授权:没有cookie的主要内容,如果未能解决你的问题,请参考以下文章
UnhandledPromiseRejectionWarning、Express.js 和 Node.js
jQuery 函数不适用于 node.js 中的 express.js 路由
如何启用调试 express.js/node.js 应用程序