【问题标题】:Both public and private socket.io connection in SPASPA 中的公共和私有 socket.io 连接
【发布时间】:2014-07-22 04:51:32
【问题描述】:

所以我有一个有两种类型用户的 web 应用程序。尚未进行身份验证的公共用户和已登录并进行身份验证的私人用户。我在单页应用程序中使用基于令牌的身份验证,页面初始加载后没有页面刷新。所以用户首先来到站点并且未经身份验证,没有可用的令牌。然后,他进行身份验证,这会向他返回一个令牌,该令牌可用于检查他是否在服务器端通过 node.js 进行了身份验证。现在我还有一些从 node.js 发送到客户端的实时消息。将有两种类型的消息。我需要向公共和私人客户端发送公共消息,并且在客户端经过身份验证后,我需要能够向经过身份验证的用户发送私人消息(例如,当他在数据库中的帐户余额发生变化时,我想发送私人客户端通知)。这些私人信息应该受到保护。

现在我有点困惑,什么是实现这一目标的最佳实践。

在单个页面应用程序中同时使用公共和私有 socket.io 的最佳方式是什么?

我在客户端使用 angular.js,但这可能不相关(使用 https://github.com/btford/angular-socket-io

非常感谢您能帮助我并指出正确的方向!

【问题讨论】:

    标签: node.js angularjs sockets authentication socket.io


    【解决方案1】:

    Socket.io 提供了一些工具,如房间或命名空间来提供帮助。

    就您而言,我认为最好的解决方案是拥有两个命名空间。一种用于未登录用户,一种用于登录用户。

    您可以仅在需要时在一个命名空间上使用授权。

    然后,如果需要,您可以在命名空间中进行广播。

    io.of('/user').on('connection', function (socket) {
         //Manage socket
    }
    
    io.of('/operator').authorization(function (handshakeData, callback) {
        if(isAuthorized){
            callback(null,true);
        }else{
            callback(null,false);
        }
    }).on('connection', function (socket) {
        //Manage the socket
    }
    
    io.of('/operator').emit('msg', { text:text});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2015-07-21
      • 1970-01-01
      • 2016-09-27
      • 2014-09-21
      • 2015-12-27
      • 2011-03-11
      • 1970-01-01
      相关资源
      最近更新 更多