我在我的一个项目中使用了ejabberd,这个项目本身是用erlang实现的。我感兴趣的是获得对身份验证流的访问,这样我就可以集成我的用户数据库,而不必在ejabberd中单独注册它们。
我已经把这里描述的大部分事情都做对了:https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html#htoc8
然而,似乎ejabberd从未从我的脚本中收到回复。以下是负责发送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
发布于 2011-05-28 11:46:27
有两个想法:
1)您的数据库是否支持SQL?如果是这样,请按照https://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver中所述启用ejabberd。您可以创建视图,将内部DB结构映射到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},就可以了。
https://stackoverflow.com/questions/6127284
复制相似问题