【问题标题】:Autobahn.js - How to pass data on subscribeAutobahn.js - 如何在订阅时传递数据
【发布时间】:2014-01-30 13:00:50
【问题描述】:

我正在使用 Ratchet 和 Autobahn.js。我想在订阅时进行一些用户验证,所以我需要将会话密钥传递给 Ratchet WAMP 服务器。你能告诉我如何在订阅事件中将一些数据传递给服务器吗?

【问题讨论】:

    标签: php websocket wamp autobahn ratchet


    【解决方案1】:

    我假设您不是在谈论身份验证,并且您已经与服务器建立了连接。

    您无需从客户端传递会话 ID,WAMP 会为您处理这些。订阅时您可以传递的唯一信息是主题。

    在 php 方面,您可以访问可用于验证的会话 ID。

    public function onSubscribe(ConnectionInterface $conn, $topic) 
    {
        $sessionId = $conn->WAMP->sessionId
    }
    



    替代解决方案:如果您确实必须从客户端传递会话 ID,那么您可以执行以下操作:

    Javascript:

    var appSession = null;
    
    ab.connect(
       // The WebSocket URI of the WAMP server
       wsuri,
    
       // The onconnect handler
       function (session) {
          appSession = session;
       }
    );
    
    
    appSession.call('myValidationChannelForUser', appSession.sessionid(), 'otherValidationParams').then(function(result)
    {
        if (result.success)
        {
            console.log('you have been subscribed to xyz..');
        }
    }
    

    php:

    public function onCall(ConnectionInterface $conn, $id, $fn, array $params) 
    { 
        $sessionId = $conn->WAMP->sessionId;
    
        if ($fn == 'myValidationChannelForUser')
        {
            // validation...
            // $params[0] == appSession.sessionid() passed from JS
            // $params[1] == otherValidationParams passed from JS
    
            // validation passed, subcribe to channel
            if (validated)
            {
                $this->onSubscribe(ConnectionInterface $conn, $topic); 
    
                return $conn->callResult($id, array('success' => 1);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我想您可以在继续订阅之前进行身份验证。

      Autobahn 已使用 WAMP RPC 实现身份验证握手。

      检查 会话验证 部分: http://autobahn.ws/js/reference/#Session_authreq

      但是,Ratchet 尚未实现 WAMP CRA 协议。 大约一年前,他们为此创建了一张票。

      那张票中的某个人已经分叉了 Ratchet 并自己实现了它。

      但如果您可以将服务器切换到 Autobahn Python 可能会更容易,因为它已经支持 WAMP CRA。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多