使用node-xmpp(node.js)注册新的xmpp帐户

我正在查看“ 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原因是指“发件人没有足够的权限取消注册”。

我怎样才能获得这样的权限?

我一直在尝试类似的东西,我想通过从nodejs到运行在Ubuntu的ejabberd服务器的带内注册来注册一个新的用户帐户。 这是我为我做的和为我工作的:

 //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的部分,似乎如果你想发送一个stream,你必须提供一个有效的ejabberd命名空间,这是失败的我。 希望这可以帮助你排除你的问题。

你在使用哪台服务器? 你确定它已经启用了XEP-77吗? 与现有客户进行testing。 确保您尝试创build的帐户不存在。 确保该帐户具有正确的域名。