2011-10-10 49 views
5

Những người tốt của StackOverflow, vui lòng trợ giúp. Tôi đã thiết lập máy chủ ejabberd trên máy ubuntu của mình, thêm máy chủ ảo, đặt {access, register, [{allow, all}]}. và đã đăng ký tài khoản quản trị. Tôi không phải là một guru Linux, nhưng tôi đã quản lý để làm điều này thiết lập cơ bản. Bây giờ, từ máy Win 7 của tôi, sử dụng Pidgin, tôi có thể đăng nhập với tư cách quản trị viên và có quyền truy cập vào nhiều tính năng quản trị. Quan trọng nhất tôi có thể tạo người dùng mới trên máy chủ. Vấn đề là tôi không thể làm điều đó với khách hàng Android của tôi bằng cách sử dụng thư viện asmack. Tôi có thể thiết lập kết nối và đăng nhập, nhưng khi tôi cố gắng đăng ký một người dùng mới hoặc quản lý tài khoản trough hoặc bằng cách gửi các gói IQ tôi bị cấm (403) lỗi đáp ứng.asmack XMPP đăng ký người dùng mới

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); 

Có ai có vấn đề tương tự hoặc có thể cho tôi biết tôi đang làm gì sai?

Cảm ơn

Đây là LogCat tôi

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

có thể điều này có thể giúp –

+0

trên máy tính của bạn, bạn có chắc chắn tường lửa của bạn không chặn cổng 5222? – Maggie

+0

bạn giải quyết vấn đề này? – CoronaPintu

Trả lời

8

tôi tìm thấy nó! Vấn đề là trong cấu hình máy chủ (nhưng tôi vẫn không hiểu tại sao tôi có thể đăng ký người dùng mới từ Pidgin trước khi thay đổi này). Đặt

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

dường như không hoạt động với các phiên bản ejabberd mới. Bạn cần phải thêm

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

nếu bạn muốn cho phép tất cả người dùng đăng ký. Nếu bạn muốn chỉ admin có quyền truy cập này, sau đó bạn cần phải thêm quy tắc truy cập mới

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

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

Để đăng ký một người dùng mới sử dụng thư viện cú đập sau khi đăng nhập thông qua quản trị hoặc một số tài khoản khác .

/** * Để đăng ký một khách hàng mới Mở Jabber máy chủ */

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

ngoại lệ ném này. tôi đã cài đặt openfire và spark vì vậy không có tệp ejabbaer/ejabberd.cfg. bạn có thể giúp tôi trong openfire – CoronaPintu

3

Đã mà bạn chỉ định các ip_access option trong mod_register? Nếu Pidgin và máy chủ ejabberd của bạn là bằng cách nào đó cả hai sử dụng cùng một IP, sau đó một quy tắc mặc định mà trông giống như sau:

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

sẽ cho phép cả những IP để đăng ký tài khoản, nhưng không phải là một khách hàng Android đó là sử dụng một IP khác nhau.

Tôi đã gặp phải sự cố liên quan và vì lý do nào đó giải pháp {access_from, register_from} hoạt động cho bạn không hoạt động như mong đợi đối với tôi. Bạn có thể hạn chế khả năng tạo tài khoản mới chỉ với một người dùng admin không?

5

trình cho tôi mã này để đăng ký một tài khoản mới:

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

với các thiết lập ejabberd sau:

{truy cập, đăng ký, [{cho phép, tất cả}]}.

Đây là thiết lập rất an toàn vì nó có thể ghi lại mà không cần tài khoản được xác thực của chúng tôi trên máy chủ (phương thức support.AccountCreation() trả về cho chúng tôi đúng).

1

tôi đi qua cùng một vấn đề và tìm ra giải pháp:

Thực hiện thay đổi trong máy chủ

Sau loggin trong ejabbered từ giao diện quản trị ur. Tới Virtual Host-Nodes-Modules-mod_register và thêm:

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

n u sẽ b thể tạo tài khoản thành công từ khách hàng của bạn

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

tôi đã cài đặt openfire và spark do đó không có tệp ejabbaer/ejabberd.cfg nào. bạn có thể giúp tôi trong openfire không – CoronaPintu

0

Hãy thử với những thay đổi trong ejabberd.cfg sau.

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

cùng với -

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

&

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

Tôi hy vọng bây giờ nó sẽ làm việc cho bạn.

Các vấn đề liên quan