Ejabberd Extauth с использованием Erlang Escript
Я использую ejabberd в одном из моих проектов, который сам реализован в erlang. Я заинтересован в получении доступа к потоку аутентификации, чтобы я мог интегрировать свою пользовательскую базу данных без необходимости регистрировать их отдельно в ejabberd.
Я правильно понял большинство вещей, как описано здесь: https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html
Однако, по-видимому, 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 вместо чтения / записи stdin / stdout внутри extauth
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 нетрудно понять. Я просто посмотрел код для ejabberd_auth
по адресу https://github.com/processone/ejabberd/blob/2.1.x/src/ejabberd_auth.erl и на самом деле это довольно просто. Просто создайте модуль под названием ejabberd_auth_abhinav
, экспортируйте необходимые функции, а затем включите {auth_method, abhinav}
и ты в порядке.