ale*_*kon 8 session session-cookies express socket.io sails.js
我正在尝试基于sails.js构建一个聊天应用程序.来自特定聊天的消息的URL如下所示:
/api/chat/:id/messages
当我使用XHR请求此URL时,它提供会话cookie并且sails.js构建会话对象.我可以轻松检查用户权限,以便从特定聊天中读取消息.
但是,我需要使用socket.io请求此URL,以便客户端可以订阅messages集合的所有未来更改.
当我使用socket.io请求此URL时,没有设置会话cookie并且sails.js会话为空.所以,我无法检查服务器端的用户权限.
我知道套接字请求不是HTTP请求.他们不会自己提供任何cookie.
有没有简单的解决方法?
我找到了一种获取socket.io握手时设置的会话对象的方法.在你的控制器中,你应该做这样的事情:
myControllerAction: function(req, res) {
var session = req.session;
if (req.isSocket) {
var handshake = req.socket.manager.handshaken[req.socket.id];
if (handshake) {
session = handshake.session;
}
}
//session now contains proper session object
}
Run Code Online (Sandbox Code Playgroud)
您可以在sails.js策略中实现此功能,并将此策略附加到某些控制器.但是不要写你的socket会话req.session!否则,您将在尝试响应客户端时遇到错误(原始版本req.session仍以某种方式使用).相反,将其保存为req.socketSession类似的东西.