Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法使用XMPPFramework在Ejabberd中注册用户_Mysql_Ios_Chat_Ejabberd_Xmppframework - Fatal编程技术网

Mysql 无法使用XMPPFramework在Ejabberd中注册用户

Mysql 无法使用XMPPFramework在Ejabberd中注册用户,mysql,ios,chat,ejabberd,xmppframework,Mysql,Ios,Chat,Ejabberd,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 conne

我正在使用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
=信息报告===2014-04-26 12:06:43===
I(:ejabberd_listener:281):(#端口)接受连接{{211,28,44250},49742}->{172,31,0235},5222}
=信息报告===2014-04-26 12:06:44===
I(:ejabberd_c2s:802):({socket_state,gen_tcp,#Port,})的身份验证失败xcc@localhost
authmethod是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:384 iPhoneXMPP[1971:90b]发送:
2014-04-25 20:46:49:620 iPhoneXMPP[1971:650b]RECV:bm9uy2u9ijmznzzoduwoteilhfvcd0iyxv0acisy2hhcnldd11dgytocxhbgdvcml0ag09bwq1lxnlc3m=
2014-04-25 20:46:49:621 iPhone XMPP[1971:650b]发送:DXNLCM5HBWU9IMLvyzeilHjlyWxtPSJSB2NHBGHvc3Qilg5VBMNLpSizMZC5Mzg1MdKxiIXJBM9U2U9IKMZN0U0NJLltg0Ruutney3R1CzLtTzU5RujFreu0NzQ3NCisBMM9AWMDESCW9Ww9Wf1DzgSzGln0Lzy1DzyWg1Wg1DzLzU9Wg1Wg1Wg1Wg1Wg2HzLzLzLc2HzLc2HzLc2HzLc2HzLzLc3Lc3LzLc3BzLzLzLzLzLc3=
2014-04-25 20:46:49:865 iPhoneXMPP[1971:4953]RECV:
2014-04-25 20:46:49:865 iPhoneXMPP[1971:90b]iphonexmppapp代表:xmppStream:didNotAuthenticate:
2014-04-25 20:46:49.865 iPhoneXMPP[1971:90b]num--680
2014-04-25 20:46:49.866 iPhoneXMPP[1971:90b]元素--(
"ioc1@localhost",
“国际奥委会”,
"ioc1@localhost",
"1",
"680",
"ioc1@localhost"
)
下面是一条重要的线

 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_方法只有在尝试登录时才会起作用,因为它需要一些身份验证机制来登录。但我只是在这里注册。为什么我不能注册。我相信这不是主机名的问题,因为我得到的日志行是“对@localhost的身份验证失败”

这意味着我正在点击服务器。ejabberd.cfg文件中是否缺少阻止我的内容

请注意:另外,我尝试将authmethod作为内部的(尽管在帮助中提到它与mnesia相关-内置DB,我使用的是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");
   }
}
要检查注册是否成功,请使用
xmppstreamidregister:(XMPPStream*)sender
XMPPStream:(XMPPStream*)sender didNotRegister:(NSXMLElement*)error
委托方法


如果有帮助,请告诉我。

在尝试从iOS客户端注册之前,您需要连接到XMPP流。@iRuth-感谢您的回复。如果我无法连接到XMPP流,我会在服务器中获取日志吗?请让我知道大家好-我还没有找到解决方案。但是一个潜在的问题可能是XMPP服务器的带内注册特性。我将XMPP服务器更改为支持从服务器注册,但仍然面临这个问题。这可能对一些遇到问题并能够解决问题的人有所帮助。这段代码非常有用。非常感谢。因为我在办公室,所以无法提前测试和回复。再次感谢你美丽的回答。希望这能解决很多问题