【问题标题】:How to reconnect anonymous user in XMPP/Jabber如何在 XMPP/Jabber 中重新连接匿名用户
【发布时间】:2011-07-14 06:44:34
【问题描述】:

我正在开发匿名连接到我的服务器的浏览器 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 参数。

【问题讨论】:

  • 请提供更多信息。你用的是什么jabber客户端?你试过什么?您会收到什么错误或日志消息等。

标签: javascript xmpp


【解决方案1】:

另一种方法是使用XEP-0077: "In-Band Registration" 在首次登录时使用 [UUID]@yourhost 形式创建一个全新的 JID,使用随机密码,然后在需要时重新登录该帐户重新连接。定期清扫并删除未使用的帐号。

【讨论】:

    【解决方案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                                      
    });
    

    【讨论】:

    • 匿名方法我应该在这里使用什么jid和密码?
    • 说实话我不知道。我想这取决于您的 XMPP 服务器配置。我总是使用有效的注册 jid/pas。您使用哪个 XMPP 服务器?我确信一些搜索会产生结果。
    • 在你的问题中,你说你可以在第一次加载页面时匿名连接,对吧?
    • 是的,我使用 jid = "mydomain.org" 并且服务器为我提供了新的匿名 jid,例如 jid="a4714f0@mydomain.org",我想在之后使用相同的匿名用户访问者重新加载页面,但我没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多