1

我在我的一个项目中使用 ejabberd,该项目本身是用 erlang 实现的。我有兴趣获得对身份验证流程的访问权限,这样我就可以集成我的用户数据库,而无需在 ejabberd 中单独注册它们。

我已经得到了这里描述的大部分内容: https ://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html#htoc8

但是,看似 ejabberd 从未收到我的 escript 的响应。下面是负责发送响应的部分代码:

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

4

1 回答 1

1

两个想法:

1) 你的数据库支持 SQL 吗?如果是这样,请{auth_method, odbc}按照https://support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driver中所述启用您可以创建视图以将您的内部数据库结构镜像到 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}即可。

于 2011-05-28T03:46:26.833 回答