【发布时间】:2014-03-10 00:07:11
【问题描述】:
我正在开发一个应用程序,该应用程序将push 内容传送到托管在不同域中的一组 Web 应用程序。我正在使用 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的授权过程中支持?
======
更多细节:
- 我还尝试使用this example 作为基础,使用知名的 oauth 提供商(例如 facebook)添加登录。我有 Passport 会话,但我仍然无法从客户端脚本进行身份验证(它仅适用于我的节点应用程序直接托管的页面)。
- 获取会话的 JSONP 请求可能是一种解决方案,但它在 Safari 中效果不佳。另外,我更喜欢在其中一个 Web 应用程序中对用户进行身份验证,而不是直接在我的节点应用程序中进行身份验证。
【问题讨论】:
-
研究使用 redis 进行会话存储。我认为这将帮助您跨域。
-
确实,它可能会有所帮助,但我认为这在我的特定情况下没有,因为我无法访问每个应用程序的会话信息以共享身份或其他内容,如果这就是你的意思的话。或者你在想别的什么?
-
websocket跨域是怎么打开的?
标签: node.js socket.io cross-domain authorization sails.js