2011-09-24 67 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