无法将用户从 iOS 客户端注册到 Ejabberd 服务器 - XMPP
Posted
技术标签:
【中文标题】无法将用户从 iOS 客户端注册到 Ejabberd 服务器 - XMPP【英文标题】:Unable to register a user from iOS Client to Ejabberd Server - XMPP 【发布时间】:2014-04-25 11:08:17 【问题描述】:我创建并运行了一个 EJabberd 服务器。我正在尝试在 ios 中注册用户的简单聊天客户端。但我无法注册用户。我确信请求正在访问 Ejabberd 服务器。
登录服务器在下面
=INFO REPORT==== 2014-04-25 10:46:51 ===
I(<0.381.0>:ejabberd_listener:281) : (#Port<0.3853>) Accepted connection 211,28,44,250,52988 -> 172,31,0,235,5222
=INFO REPORT==== 2014-04-25 10:46:52 ===
I(<0.398.0>:ejabberd_c2s:802) : (socket_state,gen_tcp,#Port<0.3853>,<0.397.0>) Failed authentication for ioc1@localhost
知道怎么做吗?这与authmethod有关吗?
这就是我在 ejabberd.cfg 中的内容
host_config, "localhost", [auth_method, [anonymous],
anonymous_protocol, sasl_anon].
以下是来自 XCODE 的日志
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>"
)
任何信息都会对我很有帮助。不知道我哪里错了 感谢并感谢您的帮助
【问题讨论】:
【参考方案1】:您真的要注册(创建)一个新的(永久)用户,还是登录(以前创建的)现有帐户?或者您不想关心并且想要没有持久帐户的匿名临时登录?
您的 ejabberd 现在配置为接受匿名登录,但您正在尝试对现有用户进行身份验证。如果您正在使用 XMPPFramework 并想获得临时登录,只需使用[xmppStream loginAnonymously:]
,服务器将使用临时 ID 登录。
但是如果你想使用持久账户数据库,你需要把auth_method
改成别的东西(查看ejabberd文档),创建用户(你可以在服务器端创建它,或者从客户端注册新用户,或者使用来自不同应用程序的现有用户数据库),然后您才能使用给定的用户名和密码进行身份验证。
【讨论】:
非常感谢您的回复。我需要的是注册一个用户。我在数据库中没有任何用户。我需要做的是从服务器注册用户并在注册表中查看用户。所以,在这种情况下,我需要创建一个新的持久用户。 此时,我不寻求任何身份验证。我正在寻找从客户端注册用户。我搜索了文档,但没有结果。你能否让我知道我需要走的方向,以便我可以破解这个。我正在追随你的脚步(你给了我关于 pref. Ejabberd 问题的答案)。我安装了 Tkabber,我可以看到聊天记录。但由于某种原因,我无法从 iOS 客户端注册新用户 在您的 ejabberd 配置错误之前,您可以不注册用户。您应该设置正确的auth_method
,例如internal
,它将启用内部用户数据库,并允许您从客户端和服务器端注册(在服务器上运行 ejabberdctl register --help
以检查如何在那里注册用户,并查看 XMPPFramework 中的 [xmppStream registerWithPassword:]
从客户端注册)。来自现有客户,例如Tkabber,你可以输入任何用户名和密码,Tkabber会尝试登录,如果登录失败会提示你注册新账号。
@Vitalyster- 我正在使用 registerWithElements。这不是我需要使用的吗?如您所说,我现在将查看服务器寻求帮助。感谢那。这对我来说是新事物
只有当您的服务器有自定义注册表单和非标准必填字段时,您才应该使用registerWithElements
。默认情况下,ejabberd 只接受用户名和密码注册,registerWithPassword:
应该可以正常工作。其实registerWithPassword:
内部使用registerWithElements:
,你只需要少写代码:)以上是关于无法将用户从 iOS 客户端注册到 Ejabberd 服务器 - XMPP的主要内容,如果未能解决你的问题,请参考以下文章