Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 跨域Sails.js Socket.io授权大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个应用程序,它将推送内容提供给托管在不同域中的一组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的auth,如here所述(通过更改api / config / sockets.js函数authorizeAttemptedSocketConnection),但它不适合生产,并且在浏览器中不受支持限制性更强的cookie策略(由于禁止使用第三方cookiE).

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

======

更多细节:

>我还尝试使用this example作为基础,向着名的oauth提供商(例如facebook)添加登录.我有Passport会话,但我仍然无法通过客户端脚本进行身份验证(它只适用于我的节点应用程序直接托管的页面).
>获取会话的JSONP请求可能是一种解决方案,但它在Safari中不能很好地工作.另外,我更喜欢用户在其中一个网络应用中进行身份验证,而不是直接在我的节点应用程序中进行身份验证.

解决方法

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

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

当然你可以指定你接受的ip列表(然后替换’*’).

值得一提的是你必须指定socket.io必须连接的位置(前端JS):

socket = io.connect(API.url);

对于任何常见的@R_616_10107@ GET / PUT / POST / deletE,请确保您的ajax信封附带凭据(cookiE).例如角度:

$@R_616_10107@Provider.defaults.withCredentials = true

让我知道事情的后续.

大佬总结

以上是大佬教程为你收集整理的node.js – 跨域Sails.js Socket.io授权全部内容,希望文章能够帮你解决node.js – 跨域Sails.js Socket.io授权所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。