我在它提供推内容中的一组不同的域托管的Web应用程序的应用工作。我使用Sails.js和Socket.io,并且它的结构是这样的:跨域Sails.js + Socket.io授权
的客户端脚本,每个Web应用程序的客户端浏览器中运行,是这样的:
socket.on('customEvent', function(message){
//do something with message on event trigger
}
然后,在服务器,事件'customEvent'在需要时发出,并且它可以工作(例如,在onConnect
事件:sails.io.emit('customEvent',{message ...}
)。
但我面临一个问题,当谈到处理授权。我已经试过第一种方法是基于Cookie的身份验证,作为解释here(通过改变api/config/sockets.js
功能authorizeAttemptedSocketConnection
),但它不是生产一个适当的解决方案,它不是在浏览器中有更严格的Cookie政策支持(由于他们默认禁止使用第三方cookie)。
我的问题是:如何实现使用sails.js适当的跨浏览器和跨域授权机制,可以在socket.io的授权过程的支持?
======
更多细节:
- 我还尝试添加的登录用的公知的OAuth提供商(例如Facebook),采用this example的位置。我有Passport会话,但我仍然无法从客户端脚本进行身份验证(它只能在由我的节点应用程序直接托管的页面中)。
- JSONP请求获得会话可能是一个解决方案,但它并没有在Safari工作。另外我更喜欢用户在其中一个Web应用程序中进行身份验证,而不是直接在我的节点应用程序中进行身份验证。
使用redis进行会话存储..这将帮助你跨域我想。 – gorelative
确实如此,它可能会有所帮助,但我认为这不是我个人的情况,因为我无法访问每个应用程序的会话信息以共享身份或其他内容,如果这就是您的意思。或者你在想什么? – jpgc
你如何打开websocket跨域? – Luc