簡體   English   中英

無法使用XMPPFramework在Ejabberd中注冊用戶

[英]Unable to register an user in Ejabberd using XMPPFramework

我正在使用XMPPFramework編寫iOS客戶端。 我無法重新分配用戶。 我已經配置了ejabberd服務器,它已經啟動並正在運行。 我沒有任何問題。 我可以從Ejabberd的門戶網站注冊用戶。 但是,當我嘗試從iOS客戶端注冊用戶時,就會出現問題。 服務器日志如下

=INFO REPORT==== 2014-04-26 12:06:43 ===
I(<0.380.0>:ejabberd_listener:281) : (#Port<0.3865>) Accepted connection {{211,28,44,250},49742} -> {{172,31,0,235},5222}

=INFO REPORT==== 2014-04-26 12:06:44 ===
I(<0.424.0>:ejabberd_c2s:802) : ({socket_state,gen_tcp,#Port<0.3865>,<0.423.0>}) Failed authentication for xcc@localhost

身份驗證方法是odbc。 由於我使用mysql進行數據和消息存儲。

我從客戶端捕獲的日志如下

 2014-04-25 20:46:49:384 iPhoneXMPP[1971:90b] SEND: <auth       xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"/>
 2014-04-25 20:46:49:620 iPhoneXMPP[1971:650b] RECV: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bm9uY2U9IjMzNzkzODUwOTEiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge>
 2014-04-25 20:46:49:621 iPhoneXMPP[1971:650b] SEND: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9ImlvYzEiLHJlYWxtPSJsb2NhbGhvc3QiLG5vbmNlPSIzMzc5Mzg1MDkxIixjbm9uY2U9IkMzN0U0NjlBLTg0RUUtNEY3RS1CNTEzLTM5RUJFREU0NzQ3NCIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LXVyaT0ieG1wcC9sb2NhbGhvc3QiLHJlc3BvbnNlPTQzYTY5OTVlZmY2Y2UwNzA0YmJkNWM4OWZiNGU5ZDQ1LGNoYXJzZXQ9dXRmLTg=</response>
2014-04-25 20:46:49:865 iPhoneXMPP[1971:4953] RECV: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>
2014-04-25 20:46:49:865 iPhoneXMPP[1971:90b] iPhoneXMPPAppDelegate: xmppStream:didNotAuthenticate:
2014-04-25 20:46:49.865 iPhoneXMPP[1971:90b] num--680
2014-04-25 20:46:49.866 iPhoneXMPP[1971:90b] elements--(
"<username>ioc1@localhost</username>",
"<password>ioc</password>",
"<name>ioc1@localhost</name>",
"<accounttype>1</accounttype>",
"<devicetoken>680</devicetoken>",
"<email>ioc1@localhost</email>"
)

重要的一行在下面

2014-04-25 20:46:49:865 iPhoneXMPP [1971:4953] RECV:

我正在使用registerwithpassword方法,我真的很困惑為什么我無法注冊。 我相信auth_method僅在嘗試登錄時才會起作用,因為它需要某種身份驗證機制才能登錄。 但是我只是在這里注冊。 為什么我無法注冊。 我相信主機名不是問題,因為我收到一條日志行,提示“ @localhost身份驗證失敗”

這意味着我正在打服務器。 ejabberd.cfg文件中缺少我阻止的內容嗎?

請注意:另外,我嘗試將authmethod作為內部方法(盡管在幫助中提到它與mnesia有關-內置數據庫,並且我正在使用mysql),仍然遇到相同的問題,並且我相信客戶端無法注冊用戶由於某些連接設置。

問題出在客戶端還是服務器端。 請指導我。 謝謝你的時間。

為了使注冊生效,您需要確保流已連接。 我在下面顯示了如何注冊用戶的示例。

- (IBAction)signUpButtonPressed:(UIButton *)sender {
   // when the sign up button is pressed, set the JID for the xmpp stream
    [self.xmppStream setMyJID:[XMPPJID jidWithString:jid]];
     // check that the stream is not disconnected
     if([self.xmppStream isDisconnected]){
          // stream is not connected, attempt to connect
         if (![self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
             NSlog(@"Error connecting: %@", error);
          }
          // after stream connects, call [self beginRegistration] in xmppStreamDidConnect delegate method
     } else {
          [self beginRegistration];
     }
 }    

-(void) beginRegistration {
  // check if inband registration is supported
   if (self.xmppStream.supportsInBandRegistration) {
       if (![self.xmppStream registerWithPassword:password error:&error]) {
             NSlog(@"Registration error: %@", error);
       }
   } else {
       NSlog(@"Inband registration is not supported");
   }
}

要檢查注冊是否成功,請使用xmppStreamDidRegister:(XMPPStream *)senderxmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error委托方法。

讓我知道是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM