我正在使用一个应用程序,它将推送内容提供给托管在不同域中的一组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的授权过程中得到支持?
==
更多详情:
答案 0 :(得分:0)
我相信你的路线必须处理CORS队友。例如:
'/auth/logout': {
controller: 'AuthController',
action: 'logout',
cors: '*'
},
当然,您可以指定您正在接受的IP列表(然后替换'*'
)。
值得一提的是你必须指定socket.io必须连接的位置(前端JS):
socket = io.connect(API.url);
对于任何常见的http GET / PUT / POST / DELETE,请确保您的ajax信封附带凭据(cookie)。例如,使用angular:
$httpProvider.defaults.withCredentials = true
让我知道它是怎么回事。