我正在尝试构建一个基于 sails.js 的聊天应用程序。来自特定聊天的消息的 URL 如下所示:
/api/chat/:id/messages
当我使用 XHR 请求此 url 时,它会提供一个会话 cookie,并且 sails.js 会构建一个会话对象。我可以轻松检查用户读取特定聊天消息的权限。
但是,我需要使用 socket.io 请求此 url,以便客户端可以订阅该 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
}
您可以在 sails.js 策略中实现此策略,并将此策略附加到某些控制器。但不要将套接字会话写入req.session
!否则,您在尝试响应客户端时会收到错误(原始req.session
仍然以某种方式使用)。相反,将其另存为req.socketSession
或类似的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)