跨域Sails.js + Socket.io授权

我正在开发一个应用程序, 将推送内容提供给托pipe在不同域中的一组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的authentication,正如这里所说的(通过改变api/config/sockets.js函数authorizeAttemptedSocketConnection ),但是这不是一个合适的生产解决scheme,并且浏览器不支持与更严格的cookie政策(由于其默认禁止第三方cookie)。

我的问题是:如何使用sails.js实现一个适当的跨浏览器和跨域授权机制,这可以在socket.io的授权过程中得到支持?

======

更多细节:

  • 我也尝试用一个着名的oauth提供者(例如facebook)添加一个login,以这个例子为基础。 我有Passport会话,但是我仍然无法从客户端脚本进行身份validation(它只能在我的节点应用程序直接托pipe的页面中工作)。
  • 获取会话的JSONP请求可能是一个解决scheme,但在Safari中不能正常工作。 另外,我更喜欢用户在Web应用程序中进行身份validation,而不是直接在我的节点应用程序中进行身份validation。

我相信你的路线必须处理CORS队友。 例:

 '/auth/logout': { controller: 'AuthController', action: 'logout', cors: '*' }, 

当然,你可以指定你正在接受的IP列表(然后replace'*' )。

值得一提的是,你必须指定socket.io必须连接到哪里(前端JS):

 socket = io.connect(API.url); 

对于任何常见的http GET / PUT / POST / DELETE,请确保您的ajax信封与凭据(cookie)一起使用。 例如angular度:

 $httpProvider.defaults.withCredentials = true 

让我知道事情的后续。