5

StackOverflowの良い人たち、助けてください。私はubuntuマシンにejabberdサーバーをセットアップし、仮想ホストを追加し、{access、register、[{allow、all}]}を設定しました。管理者アカウントを登録しました。私はLinuxの第一人者ではありませんが、この基本的な設定を行うことができました。これで、Win 7マシンから、Pidginを使用して、管理者としてログインし、多くの管理機能にアクセスできるようになりました。最も重要なのは、サーバー上に新しいユーザーを作成できることです。問題は、asmackライブラリを使用しているAndroidクライアントではそれができないことです。接続とログインを確立できますが、アカウントマネージャーを介して、またはIQパケットを送信して新しいユーザーを登録しようとすると、forbidden(403)応答エラーが発生します。

AccountManager am = new AccountManager(connection);
Map<String, String> attributes = new HashMap<String, String>();
attributes.put("username", "my_user_name");
attributes.put("password", "my_password");
attributes.put("email", "foo@foo.com");
attributes.put("name", "my_full_name");
am.createAccount("my_user_name", "my_password", attributes);


Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
//      attributes.put("username", username);
//      attributes.put("password", password);
//      reg.setAttributes(attributes);
reg.addAttribute("username", username);
reg.addAttribute("password", password);
reg.addAttribute("email", email);
reg.addAttribute("name", fullName);
PacketFilter filter = new AndFilter(new PacketIDFilter(
    reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(reg);

誰かが同様の問題を抱えているか、私が間違っていることを教えてもらえますか?

ありがとう

これが私のLogCatです

10-10 10:00:26.249: DEBUG/StatusBarPolicy(1639): [BRIGHTHY] curNetwork=22003 curHPLMN=22003
10-10 10:00:26.839: INFO/System.out(21277): 10:00:26 AM SENT (1080244736): <iq id="fMJxx-4" to="morena.local" type="get"><query xmlns="jabber:iq:register"></query></iq>
10-10 10:00:26.869: INFO/System.out(21277): 10:00:26 AM RCV  (1080244736): <iq from='morena.local' to='admin@morena.local/Smack' id='fMJxx-4' type='result'><query xmlns='jabber:iq:register'><instructions>Choose a username and password to register with this server</instructions><username>admin</username><password/><registered/></query></iq>
10-10 10:00:26.959: INFO/System.out(21277): 10:00:26 AM SENT (1080244736): <iq id="fMJxx-5" to="morena.local" type="set"><query xmlns="jabber:iq:register"><password>new_user</password><username>new_user@morena.local</username></query></iq>
10-10 10:00:26.969: INFO/System.out(21277): 10:00:26 AM RCV  (1080244736): <iq from='morena.local' to='admin@morena.local/Smack' id='fMJxx-5' type='error'><query xmlns='jabber:iq:register'><password>new_user</password><username>new_user@morena.local</username></query><error code='403' type='auth'><forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>
10-10 10:00:31.659: WARN/System.err(21277): forbidden(403)
10-10 10:00:31.659: WARN/System.err(21277):     at org.jivesoftware.smack.AccountManager.createAccount(AccountManager.java:246)
10-10 10:00:31.659: WARN/System.err(21277):     at org.jivesoftware.smack.AccountManager.createAccount(AccountManager.java:207)
10-10 10:00:31.659: WARN/System.err(21277):     at org.me.my_project.FriendProfileActivity.connectToServer(FriendProfileActivity.java:698)
10-10 10:00:31.659: WARN/System.err(21277):     at org.me.my_project.FriendProfileActivity.connectLogin(FriendProfileActivity.java:578)
10-10 10:00:31.659: WARN/System.err(21277):     at org.me.my_project.FriendProfileActivity$2.run(FriendProfileActivity.java:433)
10-10 10:00:31.659: INFO/System.out(21277): 10:00:31 AM SENT (1080244736): <iq id="fMJxx-6" to="morena.local" type="get"><query xmlns="jabber:iq:register"></query></iq>
10-10 10:00:31.679: INFO/System.out(21277): 10:00:31 AM RCV  (1080244736): <iq from='morena.local' to='admin@morena.local/Smack' id='fMJxx-6' type='result'><query xmlns='jabber:iq:register'><instructions>Choose a username and password to register with this server</instructions><username>admin</username><password/><registered/></query></iq>
10-10 10:00:31.689: INFO/System.out(21277): 10:00:31 AM SENT (1080244736): <iq id="fMJxx-7" to="morena.local" type="set"><query xmlns="jabber:iq:register"><email>some@some.com</email><password>new_user1</password><username>new_user1@morena.local</username><name>new_user1@MORENA.LOCAL</name></query></iq>
10-10 10:00:31.699: INFO/System.out(21277): 10:00:31 AM RCV  (1080244736): <iq from='morena.local' to='admin@morena.local/Smack' id='fMJxx-7' type='error'><query xmlns='jabber:iq:register'><email>some@some.com</email><password>new_user1</password><username>new_user1@morena.local</username><name>new_user1@MORENA.LOCAL</name></query><error code='403' type='auth'><forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>
10-10 10:00:31.729: WARN/System.err(21277): forbidden(403)
10-10 10:00:31.729: WARN/System.err(21277):     at org.me.my_project.utilities.CreateChatAccount.createAccount(CreateChatAccount.java:100)
10-10 10:00:31.729: WARN/System.err(21277):     at org.me.my_project.utilities.CreateChatAccount.createAccount(CreateChatAccount.java:143)
10-10 10:00:31.729: WARN/System.err(21277):     at org.me.my_project.FriendProfileActivity.connectToServer(FriendProfileActivity.java:706)
10-10 10:00:31.729: WARN/System.err(21277):     at org.me.my_project.FriendProfileActivity.connectLogin(FriendProfileActivity.java:578)
10-10 10:00:31.729: WARN/System.err(21277):     at org.me.my_project.FriendProfileActivity$2.run(FriendProfileActivity.java:433)
4

7 に答える 7

7

見つけた!問題はサーバー構成にあります (ただし、この変更の前に Pidgin から新しいユーザーを登録できた理由はまだわかりません)。設定

%% In-band registration
{access, register, [{allow, all}]}.

新しいバージョンの ejabberd では動作しないようです。追加する必要があります

{mod_register, [
      {access_from, register},
       ...
                ] ...

すべてのユーザーの登録を許可する場合。管理者のみにこのアクセス権を付与する場合は、新しいアクセス ルールを追加する必要があります

{access, register_from, [{allow, admin}]}.

{mod_register, [
      {access_from, register_from},
       ...
                ] ...
于 2011-10-11T11:35:30.220 に答える
5

新しいアカウントを登録するには、このコードが機能します。

try
{
    connection.connect ();
    Log.i (TAG, "Connect");
    mAccount = new AccountManager (connection);
    if (mAccount.supportsAccountCreation ())
    {
        mAccount.createAccount ("user", "pass");
    }

次の設定で ejabberd:

{アクセス、登録、[{許可、すべて}]}。

サーバー上で認証されたアカウントなしで記録できるため、非常に安全なセットアップです (メソッド supports.AccountCreation () は true を返します)。

于 2012-08-27T10:37:21.730 に答える
3

で指定しip_access optionましたmod_registerか?Pidgin と ejabberd サーバーが何らかの理由で両方とも同じ IP を使用している場合、デフォルト ルールは次のようになります。

{mod_register, [
    ...
    %%
    %% Only clients in the server machine can register accounts
    %%
    {ip_access, [{allow, "127.0.0.0/8"},
                 {deny, "0.0.0.0/0"}]},
    ...
] ...

これらの IP は両方ともアカウントを登録できますが、別の IP を使用していた Android クライアントは登録できません。

私は関連する問題に直面しており、何らかの理由で、{access_from, register_from}あなたのために働いた解決策が私にとっては期待どおりに機能しませんでした. 新しいアカウントを作成する機能をadminユーザーのみに制限できましたか?

于 2012-04-26T04:09:32.953 に答える
1

私は同じ問題に遭遇し、解決策を見つけました:

サーバーで変更を加える

ログイン後、管理者インターフェイスから ejabbered が表示されます。Virtual Host-Nodes-Modules-mod_register に移動し、以下を追加します。

[{welcome_message,  {"Welcome!", "Welcome to this Jabber server."}}, {access_from, register}]

お客様のクライアントから正常にアカウントを作成することができません

于 2012-09-25T10:14:27.240 に答える
0
    Create user everytime
    Very easy and work everytime


    open ejabberd.cfg file using

    sudo nano /etc/ejabberd/ejabberd.cfg

    change 600 option to infinity

    {registration_timeout, 600}.

    {registration_timeout, infinity}.
于 2014-07-10T12:03:50.207 に答える
0

ejabberd.cfg を次のように変更してみてください。

%%{ip_access, [
%% {allow, "127.0.0.0/8"},
%% {deny, "0.0.0.0/0"}]}

一緒に -

%% In-band registration
{access, register, [{allow, all}]}.

&

{mod_register, [
      {access_from, register},
       ...
                ] 

私は今それがあなたのために働くことを願っています.

于 2016-03-02T13:47:39.460 に答える
0

管理者または他のアカウントでログインした後、smack ライブラリを使用して新しいユーザーを登録します。

/** * Jabber サーバーに新しいクライアントを登録するには */

public void registerUser()
{
    AccountManager manager = connection.getAccountManager();
    try {
        manager.createAccount("Romain Guy","halejag");//username & paswd


    } catch (XMPPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
于 2011-11-29T05:15:51.337 に答える