4

新しいXMPPアカウントを登録する方法については、「XEP-0077インバンド登録」を参照しています。これが私のコードです。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理由は「送信者が登録をキャンセルするための十分な権限を持っていない」ことを意味していると述べています。

どうすればそのような許可を得ることができますか?

4

2 に答える 2

1

どのサーバーを使用していますか? XEP-77 が有効になっていますか? 既存のクライアントでテストします。作成しようとしているアカウントがまだ存在していないことを確認してください。アカウントのドメイン名が正しいことを確認してください。

于 2011-09-26T17:12:39.700 に答える