2011-09-24 49 views
4

我正在查看'XEP-0077 in-band registration'关于如何注册一个新的XMPP帐户。这是我的代码。我使用node-xmpp将我的node.js应用程序连接到ejabberd服务器。注册新的xmpp帐户与节点xmpp(node.js)

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:"[email protected]",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: '[email protected]', 
     to: '[email protected]/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原因意味着“发件人没有足够的权限来取消注册“。

我该如何获得这样的权限?

+0

你可以发布你的ejabberd配置文件的'mod_register'部分吗? – legoscia

+0

我遇到了同样的问题...你解决了这个问题吗? – Canastro

回答

1

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

+0

你指的是什么服务器......?我从http://www.process-one.net/en/ejabberd/downloads上载了ejabberd .. 如何启用XEP-77 ...? 我已经测试过pidgin,我可以添加帐户pidgin ... 但我不能运行我的代码... – yuda

+0

有很多不同的XMPP服务器:http://xmpp.org/xmpp-software/服务器/ –

3

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

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

//Host configuration 
var host = "localhost"; 
var port = "5222"; 
var admin = "[email protected]"; 
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智商是一种凌乱的,我想,如果你知道如何在propper方式使用Strophe.js一部分可能看起来有点更好,清洁器。我错过了xml的一部分,似乎如果你想发送一个流,你必须提供一个有效的ejabberd命名空间,这是我的失败。希望这可以帮助你排除你的问题。

+0

嗨@taxicala你完成了一个beacuse现在我正在做同样的过程,你可以请解释一下 – gowthaman