Внутриполосная регистрация Openfire через Bosh не работает с Strophe/Strophe.register.js

Ранее я задавал аналогичный вопрос о ejabberd, однако ejabberd создавал другие проблемы, поэтому я переключился на openfire. Чтобы не загромождать первоначальный вопрос, я решил создать новый вопрос, поскольку этот вопрос относится к openfire и отличается от той, что у меня была с ejabberd.

Итак, вот вопрос:

У меня есть xmpp-клиент strophe.js, который подключается к альфа-серверу openfire 3.10.0, работающему в облаке Amazon. Мне нужна альфа-версия 3.10.0 по сравнению с 3.9.3 из-за bfix, который включен в первую, но не во вторую. В любом случае, поскольку это клиент strophe, я включил bosh и вижу, как он работает на myAWSDNS.com. :7070. Я могу подключиться к серверу через моего клиента, используя эту службу bosh и существующие учетные записи, и отправлять сообщения туда и обратно, поэтому, похоже, все работает нормально.

Я также хотел бы добавить внутреннюю регистрацию, для чего я использую strophe.register.js

Это код, который я использую для этого:

 var tempConn = new Strophe.Connection("http//myAWSDNS.com:7070/http-bind/");
    tempConn.register.connect("myAWSDNS.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
    }
});

Кажется, это работает нормально, так как он входит в первую скобку if (status === Strophe.Status.REGISTER) и пытается установить connection.register.fields.username = "juliet";

Однако здесь при выполнении этой строки происходит переход к строке 2476 strophe.js:

if (this.connect_callback) {
        try {
            this.connect_callback(status, condition);
        } catch (err) {
            Strophe.error("User connection callback caused an " +
                          "exception: " + err);
        }
    }

где 2476 — это код в скобке catch(err) { ...... }.

Если я проверю err, я получу следующее: введите здесь описание изображения

Итак, сообщение: connection is not defined и, очевидно, регистрация не работает, и я не знаю, почему. Есть ли у кого-нибудь какие-либо сведения об этом?

Спасибо и всего наилучшего,

Крис


person hansa    schedule 18.09.2014    source источник


Ответы (1)


Вам может не понравиться этот ответ... Причина connection == undefined в том, что вы назвали его tempConn.

person fpsColton    schedule 18.09.2014
comment
Мне это не нравится или не нравится, я не понимаю. Является ли tempConn каким-то зарезервированным именем? Так ты говоришь, что мне просто нужно дать ему другое имя? - person hansa; 18.09.2014
comment
ой, я думаю, понял, ха-ха - person hansa; 18.09.2014
comment
Ха, честно говоря, это, вероятно, то, что помешало вашим попыткам с ejabberd работать. Кроме того, не забудьте отметить ответ как принятый, ура! - person fpsColton; 18.09.2014
comment
да, я посмотрю, работает ли ejabberd, хотя я получаю странное поведение с ним, не связанное с внутриполосной регистрацией. Спасибо за вашу помощь! - person hansa; 18.09.2014