我正在使用匿名连接到我的服务器的浏览器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参数。
答案 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
});