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

Posted

技术标签:

【中文标题】如何在 XMPP/Jabber 中重新连接匿名用户【英文标题】:How to reconnect anonymous user in 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客户端?你试过什么?您会收到什么错误或日志消息等。 【参考方案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",我想在之后使用相同的匿名用户访问者重新加载页面,但我没有成功。

以上是关于如何在 XMPP/Jabber 中重新连接匿名用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地机器上测试 xmpp/jabber?

即使与 XMPP 服务器断开连接,如何保持群聊室(MUC)一直存在?

xmpp(jabber) 协议中发送者的标识

设置了自定义密码的 XMPP/Jabber 服务器?

如何将 custon xmpp/jabber 请求发送到服务器

龙卷风 Web 应用程序中的 Python xmpp jabber 客户端