Asmack XMPP регистрация новых пользователей

Хорошие люди StackOverflow, пожалуйста, помогите. Я установил ejabberd-сервер на моем компьютере ubuntu, добавил виртуальный хост, установил {доступ, регистр, [{allow, all}]}. И зарегистрировал учетную запись администратора. Я не гуру linux, но мне удалось сделать эту базовую настройку. Теперь, с моей машины Win 7, используя Pidgin, я могу войти в систему как администратор и получить доступ ко многим административным функциям. Самое главное, что я могу создавать новых пользователей на сервере. Проблема в том, что я не могу сделать это с моим клиентом android, используя библиотеку asmack. Я могу установить соединение и логин, но когда я пытаюсь зарегистрировать нового пользователя либо через менеджера учетных записей, либо путем отправки пакетов IQ, я получаю запрещенную ошибку ответа (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) 

Я нашел это! Проблема в конфигурации сервера (но я до сих пор не понимаю, почему я мог зарегистрировать нового пользователя из 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}, ... ] ... 

Создает для меня этот код для регистрации новой учетной записи:

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

Со следующими настройками ejabberd:

{Access, register, [{allow, all}]}.

Это очень безопасная настройка, потому что она может записываться без наших аутентифицированных учетных записей на сервере (метод поддерживает.AccountCreation () возвращает нам true).

Вы указали ip_access option mod_register в 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-адресам регистрировать учетные записи, но не клиент Android, который использует другой IP-адрес.

Я столкнулся с связанной проблемой, и по какой-то причине решение {access_from, register_from} которое сработало для вас, не работало так, как ожидалось для меня. Могли ли вы ограничить возможность создания новых учетных записей только для пользователя- admin ?

Я столкнулся с той же проблемой и нашел решение:

Вносить изменения в сервер

После входа в ejabbered из интерфейса администрирования ur. Перейдите в Virtual Host-Nodes-Modules-mod_register и добавьте:

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

Nu ll b возможность успешно создать аккаунт с вашего клиента

Чтобы зарегистрировать нового пользователя, используя библиотеку 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(); } } 
  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}. 

Попробуйте со следующими изменениями в 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}, ... ] 

Надеюсь, теперь это сработает для вас.