Ejabberd Extauth с использованием Erlang Escript - PullRequest
1 голос
/ 25 мая 2011

Я использую ejabberd в одном из моих проектов, который сам реализован в erlang. Я заинтересован в получении доступа к потоку аутентификации, чтобы я мог интегрировать свою пользовательскую базу данных без необходимости регистрировать их отдельно в ejabberd.

У меня все правильно, как описано здесь: https://git.process -one.net / ejabberd / магистральный / блобовым / сырье / 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, и я бы, вероятно, хотел бы воспользоваться передачей сообщений erlang вместо чтения / записи stdin / stdout внутри extauth

1 Ответ

1 голос
/ 28 мая 2011

Две идеи:

1) Поддерживает ли ваша база данных SQL? Если это так, включите {auth_method, odbc}, как описано в https://support.process -one.net / doc / display / MESSENGER / Использование + ejabberd + с + 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}, и все готово.

...