Зарегистрировать новую учетную запись xmpp с помощью node-xmpp ( node.js)
Я просматриваю " внутриполосную регистрацию 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 ответа
Я боролся с чем-то похожим, я хотел зарегистрировать новую учетную запись пользователя через встроенную регистрацию от 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, что было для меня ошибкой. Надеюсь, это поможет вам решить вашу проблему.
Какой сервер вы используете? Вы уверены, что у него включен XEP-77? Протестируйте с существующим клиентом. Убедитесь, что учетная запись, которую вы пытаетесь создать, еще не существует. Убедитесь, что учетная запись имеет правильное имя домена.