2015-08-03 3 views
1

Я пытаюсь интегрировать ejabberd с аутентификацией django. Я следую инструкциям: https://github.com/ffalcinelli/django-ejabberd-bridgeкак аутентифицировать пользователей с помощью django ejabberd bridge

Я следил за каждым шагом.

Я определил путь сценария для аутентификации

{auth_method, external}. 
{extauth_program, "script.sh"}. (I have defined full path here) 

содержание файла скрипта является:

#!/bin/bash 
source <path>/env/bin/activate 
python <path>/manage.py ejabberd_auth [email protected] 

Моя проблема в том, что я хочу ejjaberd поддерживать состояние каждого пользователя (онлайн, оффлайн, прочь и т. д.). Я думаю, что всякий раз, когда пользователь войдет в систему (или выходит из системы), эти данные должны быть отправлены на сервер ejjaberd. Я попытался войти в систему и выход из системы, но эти пользователи не регистрируются на ejabberd (LOCALHOST: 5280/администратора)

Я попробовал эту команду из консоли:

python manage.py ejabberd_auth [email protected] 

Он должен задать мне имя пользователя и пароль. В файле журнала есть только один журнал:

2015-08-03 08:11:05,791 [DEBUG] ejabberd_bridge.management.commands.ejabberd_auth: Starting serving authentication requests for eJabberd 

Как я могу отправить пользовательские данные в ejabberd?

ответ

2

Вы ожидаете слишком много функций от этого модуля аутентификации.

Джанго-ejabberd мост цель, чтобы ejabberd проверки подлинности против Django промежуточного программного обеспечения аутентификации, как описано в проекте README:

Прямо сейчас это просто позволяет службе ejabberd выполнять аутентификацию против промежуточного аутентификации Джанго.

Это не имеет никакого отношения к изменению присутствия, например. Этот мост будет использовать в этом worklow:

  1. пользователь хочет войти в ejabberd с помощью XMPP клиента
  2. использовать ejabberd внешнего AUTH, таким образом ваш скрипт для Джанго моста, чтобы проверить, если пользователь и действительные учетные данные.
  3. ejabberd использует результат сценария для принятия или отклонения запроса на аутентификацию пользователя.

Всё. Присутствие и состояние пользователя по-прежнему управляются, как обычно, с помощью XMPP. Пока сеанс XMPP открыт, пользователь будет рассматриваться как онлайн. Когда клиент XMPP отключается, пользователь будет замечен как offline by ejabberd и т. Д.

База данных пользователей не дублируется. Он хранится в бэкэнд-сервисе. Это также причина, по которой пользователь не может быть указан из веб-интерфейса: ejabberd не обрабатывает их.

+0

Пользователь хочет войти в систему ejabberd с помощью клиента XMPP: Вы имеете в виду пользовательский интерфейс сервера ejjaberd для входа в систему (localhost: 5280/admin) или мне нужно установить отдельный пакет, чтобы включить вход клиента XMPP. –

+0

В ejabberd существует единая унифицированная аутентификация, поэтому она работает как с клиентом XMPP, так и с веб-консолью. Пользователи не реплицируются и хранятся в базе данных ejabberd. По этой причине они не могут отображаться из интерфейса веб-администратора, поскольку ejabberd не имеет доступа к списку пользователей. Он просто запрашивает службу аутентификации, если это необходимо, на основе имени пользователя и полученных учетных данных. –

1

Если вы хотите только наличие пользовательского состояния, модем django-ejabberd может управлять им. вы можете видеть онлайн-пользователей в интерфейсе веб-администратора http://localhost:5280/admin/server/localhost/online-users/. Но в вашей точке регистрации пользователя, django-ejabberd-bridge не делает этого. Если вы хотите зарегистрировать пользователя из django в XMPP, вы должны запросить его с помощью библиотек javascript, таких как converse.js, strophe.js и т. Д.

Я не пробовал регистрировать пользователя, используя converse.js. Strophe предоставляет плагин под названием strophe.register.js для регистрации пользователей.