2014-01-30 69 views
0

我正在使用Ratchet和Autobahn.js。我想在訂閱上進行一些用戶驗證,所以我需要將會話密鑰傳遞給Ratchet WAMP服務器。你能告訴我如何在訂閱事件中將一些數據傳遞給服務器?Autobahn.js - 如何傳遞訂閱數據

回答

1

我想你可以做一個身份驗證,然後再繼續訂閱。

高速公路實施了與WAMP RPC的認證握手。

檢查會話驗證部分: http://autobahn.ws/js/reference/#Session_authreq

然而,救護車還沒有實施的WAMP CRA協議,但。 大約一年前他們爲此創建了一張票。

該票中的某人已經分叉棘輪並自行實施。

但是,如果您可以將服務器切換到Autobahn Python,它可能會更容易,因爲它已經支持WAMP CRA。

+0

抱歉,我只能在答案中有一個鏈接,這裏是[ticket](https://github.com/cboden/Ratchet/issues/63)和[Autobahn | Python](http://autobahn.ws /蟒/參考/) – oldlam

3

我假設你不是在談論身份驗證,並且你已經建立了與服務器的連接。

有沒有必要從客戶端傳遞會話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); 
     } 
    } 
} 
相關問題