зарегистрировать новую учетную запись xmpp с помощью node-xmpp (node.js) - PullRequest
4 голосов
/ 24 сентября 2011

Я смотрю ' внутриполосная регистрация XEP-0077 ' о том, как зарегистрировать новую учетную запись XMPP. Вот мой код Я использую node-xmpp для подключения моего приложения node.js к серверу ejabberd.

var net = require('net');
var xmpp = require('node-xmpp');
var cache = new Object();

net.createServer( function(socket) {
socket.setEncoding('utf8');
socket.addListener('data',function(data) {
   data = data.substr(0,data.length-2);

    if(cache.admin==undefined && data=='login') {
        var ejabberd =new xmpp.Client({jid:"admin@mine",password:'12345',host:'192.168.7.202',port:'5222'});
        cache.admin = ejabberd;

        cache.admin.addListener('online',function() {
            cache.admin.send(new xmpp.Element('presence',{type:'chat'}).c('show').c('status').t('mine status'));
            cache.admin.send(new xmpp.Element('iq',{type:'get',id:'reg1'}).c('query',{xmlns:'jabber:iq:register'}));            
        })

        cache.admin.addListener('stanza',function(stanza) {
            if(stanza.is('iq')) {
                console.log(stanza.children[1]);
            }
        })

        cache.admin.addListener('end',function() {
            cache.admin.end();
            cache.admin = undefined;
        })

    }

    if(cache.admin!=undefined && data=='logout') {
        cache.admin.end();
        cache.admin = undefined;
    } else if(cache.admin!=undefined && data=='register') {
        cache.admin.send(new xmpp.Element('iq',{type:'set',id:'reg1'}).c('query',{xmlns:'jabber:iq:register'}).c('username').t('alow').up().c('password').t('test'));
    }
});

}).listen(5000);

Если я запускаю этот код, я получаю эту ошибку:

{ name: 'error',
    parent: 
     { name: 'iq',
     parent: null,
     attrs: 
      { from: 'admin@mine',
        to: 'admin@mine/20108892991316770090454637',
        id: 'reg1',
        type: 'error',
        xmlns: 'jabber:client',
        'xmlns:stream': 'http://etherx.jabber.org/streams' },
     children: [ [Object], [Circular] ] },
    attrs: { code: '403', type: 'auth' },
    children: 
    [ { name: '**forbidden**',
       parent: [Circular],
       attrs: [Object],
       children: [] } ] }

В «XEP-0077: внутриполосная регистрация» говорится, что причина forbidden означает, что «у отправителя недостаточно прав для отмены регистрации».

Как я могу получить такие разрешения?

Ответы [ 2 ]

4 голосов
/ 10 января 2014

Я боролся с чем-то похожим, я хотел зарегистрировать новую учетную запись пользователя через встроенную регистрацию от nodejs до сервера ejabberd, работающего в Ubuntu.Вот что я сделал и работал для меня:

//Dependencies
var xmpp = require('node-xmpp');

//Host configuration
var host = "localhost";
var port = "5222";
var admin = "sebastian@localhost";
var adminPass = "adminPass";

var connection = new xmpp.Client({
    jid: admin,
    password: adminPass,
    host: host,
    port: port
});

//user to be registered name & pass
var newUserName = "pepe";
var newUserPass = "pepePass";

//Stream
var iq = "<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' to='localhost'><iq type='set' id='reg2'><query xmlns='jabber:iq:register'><username>" + newUserName + "</username><password>" + newUserPass + "</password></query></iq></stream>";

//Send
connection.send(iq);

//End
connection.end();

Var iq немного грязный, я полагаю, что если вы знаете, как использовать Strophe.js более корректно, эта часть может выглядеть немногоприятнее и чище.Я пропустил раздел xml, кажется, что если вы хотите отправить поток, вы должны предоставить допустимое пространство имен ejabberd, что было для меня ошибкой.Надеюсь, это поможет вам решить вашу проблему.

1 голос
/ 26 сентября 2011

Какой сервер вы используете?Вы уверены, что у него включен XEP-77?Протестируйте с существующим клиентом.Убедитесь, что учетная запись, которую вы пытаетесь создать, еще не существует.Убедитесь, что в учетной записи указано правильное имя домена.

...