我在我的一个项目中使用 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