1

私は自分のプロジェクトの 1 つで 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 であり、extauth 内の stdin/stdout の読み取り/書き込みの代わりに erlang メッセージ パッシングを利用したいので、ユーザー データベースを統合するためのより良い方法があるかどうかに興味があります。

4

1 に答える 1

1

2 つのアイデア:

1) データベースは SQL をサポートしていますか? その場合は、 https:{auth_method, odbc} //support.process-one.net/doc/display/MESSENGER/Using+ejabberd+with+MySQL+native+driverで説明されているように有効にします。ビューを作成して、内部 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}

于 2011-05-28T03:46:26.833 に答える