SPA中的公共和私有socket.io连接

时间:2014-06-02 06:14:58

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

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

现在我对实现这一目标的最佳做法感到困惑。

在单页面应用程序中提供公共和私有socket.io的最佳方法是什么?

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

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

1 个答案:

答案 0 :(得分: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});