2011-10-10 13 views
5

Buenas personas de StackOverflow, por favor ayuda. He configurado un servidor ejabberd en mi máquina ubuntu, he añadido un host virtual, establezco {access, register, [{allow, all}]}. y registró una cuenta de administrador. No soy un gurú de Linux, pero he logrado hacer esta configuración básica. Ahora, desde mi máquina Win 7, usando Pidgin, puedo iniciar sesión como administrador y tener acceso a muchas funciones administrativas. Lo más importante es que puedo crear nuevos usuarios en el servidor. El problema es que no puedo hacer eso con mi cliente de Android usando la biblioteca asmack. Puedo establecer la conexión y el inicio de sesión, pero cuando trato de registrar un nuevo usuario, ya sea a través del administrador de cuenta o enviando paquetes IQ, obtengo un error de respuesta prohibido (403).asmack XMPP nuevo registro de usuario

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", "[email protected]"); 
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); 

¿Alguien ha tenido problemas similares o puede decirme qué estoy haciendo mal?

Gracias

Aquí está mi 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='[email protected]/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>[email protected]</username></query></iq> 
10-10 10:00:26.969: INFO/System.out(21277): 10:00:26 AM RCV (1080244736): <iq from='morena.local' to='[email protected]/Smack' id='fMJxx-5' type='error'><query xmlns='jabber:iq:register'><password>new_user</password><username>[email protected]</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='[email protected]/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>[email protected]</email><password>new_user1</password><username>[email protected]</username><name>[email protected]</name></query></iq> 
10-10 10:00:31.699: INFO/System.out(21277): 10:00:31 AM RCV (1080244736): <iq from='morena.local' to='[email protected]/Smack' id='fMJxx-7' type='error'><query xmlns='jabber:iq:register'><email>[email protected]</email><password>new_user1</password><username>[email protected]</username><name>[email protected]</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) 
+0

Quizás esto pueda ayudar –

+0

en su máquina Windows, ¿está seguro de que su firewall no bloquea el puerto 5222? – Maggie

+0

¿resuelve este problema? – CoronaPintu

Respuesta

8

lo encontré! El problema está en la configuración del servidor (pero todavía no entiendo por qué podría registrar un nuevo usuario de Pidgin antes de este cambio). Configuración

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

parece que no funciona con las nuevas versiones de ejabberd. Debe agregar

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

si desea permitir que todos los usuarios se registren. Si desea que sólo administrador de tener este acceso, entonces es necesario agregar nueva regla de acceso

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

y

{mod_register, [ 
     {access_from, register_from}, 
     ... 
       ] ... 
0

Para registrar un nuevo usuario usando la biblioteca justo después de iniciar sesión a través de administración o alguna otra cuenta .

/** * Para registrar un nuevo cliente En servidor 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(); 
    } 
} 
+0

esta excepción de tiro. He instalado firefire y spark para que no haya un archivo ejabbaer/ejabberd.cfg. me pueden ayudar en openfire – CoronaPintu

3

Tenía ha especificado el ip_access option en mod_register? Si Pidgin y su servidor ejabberd son de alguna manera ambos utilizan el mismo IP, a continuación, una regla por defecto que se ve algo como esto:

{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"}]}, 
    ... 
] ... 

permitiría a esas dos direcciones IP para registrar las cuentas, pero no es cliente de Android que estaba usando una IP diferente

He estado enfrentando un problema relacionado, y por alguna razón la solución {access_from, register_from} que funcionó para usted no funcionó como esperaba. ¿Pudo restringir la capacidad de crear cuentas nuevas solo a un usuario admin?

5

funciona para mí este código para registrar una nueva cuenta:

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

con la siguiente configuración ejabberd:

{acceso, registro, [{permitirá, all}]}.

Es una configuración muy segura porque puede grabar sin nuestras cuentas autenticadas en el servidor (el método supports.AccountCreation() nos devuelve verdadero).

1

me encontré con el mismo problema y encontrar la solución:

hacer cambios en el servidor

Después de autenticarte ejabbered de Ur interfaz de administración. Ir a Virtual Host-nodos-modules-mod_register y añadir:

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

n u ll aab capaz de crear con éxito la cuenta de su cliente

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}. 
+0

tuve instalar firefire y chispa para que no haya ningún archivo ejabbaer/ejabberd.cfg. puedes ayudarme en fuego abierto – CoronaPintu

0

Pruebe con los siguientes cambios en ejabberd.cfg.

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

junto con -

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

&

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

espero que ahora va a trabajar para usted.

Cuestiones relacionadas