Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMPP带内注册(XEP-0077):不同于简单的jid/pw登录,步骤是什么?_Javascript_Xmpp_Registration_User Accounts_Strophe - Fatal编程技术网

Javascript XMPP带内注册(XEP-0077):不同于简单的jid/pw登录,步骤是什么?

Javascript XMPP带内注册(XEP-0077):不同于简单的jid/pw登录,步骤是什么?,javascript,xmpp,registration,user-accounts,strophe,Javascript,Xmpp,Registration,User Accounts,Strophe,所以我有一个小JavaScript/Strophejs xmpp客户端,它连接到一个ejabberd服务器。到目前为止,我已经在ejabberd web管理员中创建了用户,例如,我创建了用户a@testserver.p1.im和用户b@testserver.p1.im. 我的客户端支持登录这些现有帐户之一,并在这些帐户/用户之间发送消息 但是,我也希望能够从HTML表单在服务器上创建用户,用户在其中输入所需的jid和密码 在xmpp中,这称为带内注册() 现在,以下是用户登录到现有帐户时的基本场

所以我有一个小JavaScript/Strophejs xmpp客户端,它连接到一个ejabberd服务器。到目前为止,我已经在ejabberd web管理员中创建了用户,例如,我创建了用户a@testserver.p1.im和用户b@testserver.p1.im.

我的客户端支持登录这些现有帐户之一,并在这些帐户/用户之间发送消息

但是,我也希望能够从HTML表单在服务器上创建用户,用户在其中输入所需的jid和密码

在xmpp中,这称为带内注册()

现在,以下是用户登录到现有帐户时的基本场景:

$(document).ready(function () {
$('#SignIn').bind('click', function () {
    $(document).trigger('connect', { 
                                    jid: $('#LogineMail').val(), password: $('#LoginPassword_f').val()
                                    }
                        );
                        });
});
因此,上面的代码触发“连接”,如下所示:

$(document).bind('connect', function (ev, data) {
console.log('connect fired');
var conn = new Strophe.Connection("http://bosh.metajack.im:5280/xmpp-httpbind");
conn.connect(data.jid, data.password, function (status) {
    console.log('callback being done');
    if (status === Strophe.Status.CONNECTED) {
        alert('connected!');
        $(document).trigger('connected');
        alert('Connected successfully');
    } else if (status === Strophe.Status.DISCONNECTED) {
        $(document).trigger('disconnected');
    }
    else
    {
        Hello.log("error");
        console.log('error');
    }
});

Hello.connection = conn;
});
也就是说,这将创建一个新的Strophe.connection,并使用给定的jid和密码登录。然后我可以发送消息

然而,带内注册的情况有点不同。XEP-0077规定:

3.1实体向主机注册

为了确定向主机注册需要哪些字段,实体应首先向主机发送IQ get。实体不应尝试通过首先发送IQ集来猜测所需字段,因为所需数据的性质取决于服务供应

例1。实体从主机请求注册字段

我在chrome JS控制台中遇到以下错误:

未捕获的TypeError:无法读取未定义的strophe.register.js:90的属性“bind”

不确定我是否遗漏了什么,或者strophe.register.js是否有其他依赖项


我在这里使用strophe.register.js:

连接到服务器和连接被“验证”是有区别的。为了执行带内注册,您只需连接,不执行身份验证步骤,然后只需发送节来执行注册。如果服务器支持带内注册,他将允许该注册(同时他应防止在连接未通过身份验证时与其他XMPP实体进行任何通信)。

Hi Flow,感谢您的回答。我找到了strophe.register.js,现在正在尝试使用它。根据我的理解,它应该允许我相当容易地注册用户,但是,我有一些问题。我已经在原来的帖子中添加了这个。谢谢,BR,克里斯我不确定,但是我认为你应该考虑在新的问题中问你现在更具体的问题,并把这个问题标为答案。现在,你的问题帖子是一堵巨大的文字墙,实际问题隐藏得很好。是的,我会这么做。我只是有时候不敢开口问太多的问题,不知道是不是这样。但我会在这种情况下做,谢谢你的投入!重要的是问题的“质量”,而不是数量。
<iq type='get' id='reg1' to='shakespeare.lit'>
  <query xmlns='jabber:iq:register'/>
</iq>
$('#JoinSend').bind('click', function () {
    var tempConn = new Strophe.Connection("http://bosh.metajack.im:5280/xmpp-httpbind");
    tempConn.register.connect("testserver.host56.com", function (status) {
        if (status === Strophe.Status.REGISTER) {
            // fill out the fields
            connection.register.fields.username = "juliet";
            connection.register.fields.password = "R0m30";
            // calling submit will continue the registration process
            connection.register.submit();
        } else if (status === Strophe.Status.REGISTERED) {
            console.log("registered!");
            // calling login will authenticate the registered JID.
            connection.authenticate();
        } else if (status === Strophe.Status.CONFLICT) {
            console.log("Contact already existed!");
        } else if (status === Strophe.Status.NOTACCEPTABLE) {
            console.log("Registration form not properly filled out.")
        } else if (status === Strophe.Status.REGIFAIL) {
            console.log("The Server does not support In-Band Registration")
        } else if (status === Strophe.Status.CONNECTED) {
            // do something after successful authentication
        } else {
            // Do other stuff
        }
    });
    });