ejabberd

时间:2018-01-05 14:53:59

标签: erlang hook ejabberd whatsapp

我正在开发像whatsapp这样的项目,并使用ejabberd作为Android / IOS客户端的后端服务器。我想做一些类似步骤的whatsapp- 1.客户端向服务器发送手机号码。 2.服务器发送OTP以返回客户端并启动计时器说2分钟。 3.如果客户端在指定的时间内从服务器发送到服务器的正确OTP。客户将被注册。

我需要帮助,我应该在哪个ejabberd模块中编写上述步骤的代码。我知道,要修改Ejabberd我可以使用Hooks和IQ处理程序,但是一旦用户注册就可以使用它们。正确?

我应该使用其他语言服务器,仅用于上述步骤吗?请帮忙。

2 个答案:

答案 0 :(得分:1)

您应该编写新的ejabberd模块,在特定端口上启动新的SSL服务器。对此进行身份验证。

如果您熟悉ejabberd的核心,可以在配置的listen部分添加自己的模块,并将新模块写为服务器的后端(与编写ejabberd_c2s的{​​ejabberd本身相同,{{ 1}}等。) 我刚读了它的代码,我也建议你阅读代码 例如,在ejabberd版本17.01 here中读取config并为ejabberd_service密钥的每个部分运行tcp服务器。每个部分都有Port,Module和Opts三部分。对于ejabberd的xmpp客户端,这些是5222,listen,而Opts是其他值。在here中为每个已接受的连接调用ejabberd_c2s。在ejabberd_socket:start(Module, gen_tcp, Sock, Opts) here中启动一个进程说A用于从套接字接收并解析XML并将它们发送到另一个进程,说B和hereejabberd_socket:start/4启动进程(B)。进程B从进程A接收XML,并在ejabberd中执行XMPP客户端之外的所有操作。

答案 1 :(得分:1)

我认为你应该创造一个宁静的服务来做到这一点。

请考虑以下步骤:

  1. 客户端将手机号码发送给宁静的服务。
  2. restful服务创建一个OTP并将其保存在Redis中并设置过期。
  3. 客户端将OTP发送给restful服务。如果OTP正确,服务会向客户端发送一个jwt令牌,并将其保存在Redis中并设置过期。
  4. 客户端将jwt令牌发送到eJabberd服务器,服务器使用ejabberd_auth_jwt模块进行身份验证。
  5. 这可能符合您的要求。