我在我的一个项目中使用ejabberd,它本身是在erlang中实现的。我有兴趣获得对身份验证流程的访问权限,这样我就可以集成我的用户数据库,而无需在ejabberd中单独注册它们。
我已经掌握了大部分正确的内容,如下所述: https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html#htoc8
然而,看似ejabberd从未收到我的escript的回复。以下是负责发送resopnse的代码的一部分:
process_data(["auth", _User, _Server, _Pass]) ->
BB = <<1:16>>, %% result code 1 coded as short
AA = byte_size(BB), %% AA is byte length of result
Bin = <<AA:16,BB/binary>>, %% finally packing AA as short along with BB
io:put_chars(Bin);
从我的日志中我最终发送:
=DEBUG== 2011-05-25 21:05:15 == <0.2.0> == extauth:53 ===
sent <<0,2,0,1>>
这与我以前在PHP中完全相似:
fwrite($out, pack("nn", 2, $result_code));
我不知道我搞砸了。
我也感兴趣,如果有更好的方法来集成我的用户数据库,因为我的应用程序本身在erlang中,我可能想利用erlang消息传递而不是读取/写入extauth中的stdin / stdout
答案 0 :(得分:1)
两个想法:
1)您的数据库是否支持SQL?如果是,请按https://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver中所述启用{auth_method, odbc}
您可以创建视图以将内部数据库结构镜像到ejabberd所期望的内容。
2)你总是可以创建自己的auth_method。如果你已经熟练使用Erlang,那么Ejabberd的代码就不难理解了。我只是在https://github.com/processone/ejabberd/blob/2.1.x/src/ejabberd_auth.erl浏览了ejabberd_auth
的代码,实际上它非常简单。只需创建一个名为ejabberd_auth_abhinav
的模块,导出必要的函数,然后启用{auth_method, abhinav}
,就可以了。