如何在XMPP / Jabber中重新连接匿名用户

时间:2011-07-14 06:44:35

标签: javascript xmpp

我正在使用匿名连接到我的服务器的浏览器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来自两种情况下的cookie。 第二种方法没问题,但我无法在所有流行的浏览器中正确管理rid参数。

2 个答案:

答案 0 :(得分:3)

另一种方法是使用XEP-0077:“带内注册”在首次登录时使用随机密码创建[UUID] @yourhost形式的全新JID,然后在以后重新登录该帐户你需要重新连接。扫描并定期删除未使用的帐户。

答案 1 :(得分:2)

你可以使用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                                      
});
相关问题