簡體   English   中英

如何在 XMPP/Jabber 中重新連接匿名用戶

[英]How to reconnect anonymous user in XMPP/Jabber

我正在開發匿名連接到我的服務器的瀏覽器 javascript xmpp 客戶端。

但是當用戶重新加載頁面或離開頁面並隨后返回時,我需要使用相同的匿名帳戶重新連接到服務器。 我怎樣才能做到這一點?

我正在使用 Strophe 庫(xmpp over bosh)。 所以我已經嘗試過以下操作:

connection.connect(jid, "", onConnect);

這導致來自服務器的失敗響應:

<body xmlns='http://jabber.org/protocol/httpbind'>
<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<not-authorized/></failure>
</body>

並且:

connection.attach(jid, sid, rid, onConnect);

其中 jid、rid 和 sid 在這兩種情況下都來自 cookies。 第二種方法還可以,但我無法在所有流行的瀏覽器中正確使用 rid 參數進行管理。

另一種方法是使用XEP-0077 : "In-Band Registration" 在首次登錄時創建一個 [UUID]@yourhost 形式的全新 JID,使用隨機密碼,然后在需要重新連接時重新登錄該帳戶。 定期清掃並刪除未使用的帳戶。

您可以使用 jQuery 來完成(參見 $(document).ready)。 下面的示例使用 Strophe 建立與 XMPP 服務器的 BOSH 通信。 用戶加入 MUC 房間。

function onConnect(status) {
  if (status == Strophe.Status.CONNECTED) {
    var joined = false;
    var participants = {};
    $('#events').html('<text class="textmainleft">XMPP connection established. Ready to rock n roll!</text>');
    connection.send($pres().c('priority').t('-1'));
    connection.addHandler(notifyUser, null, 'message', 'groupchat', null, null);
    connection.send(
      $pres({
        to: '[% groupchatroom %]@xmppserver.dom/' + "[% nickname %]"
      }).c('x', {xmlns: 'http://jabber.org/protocol/muc'}));
  } else if (status == Strophe.Status.AUTHFAIL) {
      $(location).attr('href', AUTHFAIL_URL);
  } else if (status == Strophe.Status.CONNFAIL) {
    $(location).attr('href', AUTHFAIL_URL);
  }
}

$(document).ready(function () {
  var user_id = [% user_id %];
  connection = new Strophe.Connection(BOSH_SERVICE);
  connection.connect( "[% jid %]", "[% password %]", onConnect);
  // Additional custom code goes here                                      
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM