Как полностью интегрировать XMPP на веб-сайт с зарегистрированными пользователями

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

Вот мои вопросы:

  • Как правильно создать учетную запись? Прямо сейчас, я думаю о регистрации пользователя в нашем веб-приложении, мы бы назвали script, который выполнил бы команду ejabberd для создания пользователя.

  • Аутентификация пользователя. После входа пользователя на наш сайт пользователь будет автоматически войти в систему чата. Как вы это делаете на стороне клиента с помощью strophe.js? Насколько я понимаю, вам нужно предоставить JID и пароль для аутентификации, поэтому я думаю, что при входе в систему будет существовать вызов ajax, чтобы получить пароль пользователя, а затем использовать текст ответа на вызов входа в систему strrophe.js. Это безопасно? Существуют ли другие способы сделать это?

  • Регистрация присутствия. У нашего веб-приложения есть система контактов, но у XMPP есть собственный способ добавления контактов через подписку на присутствие, верно? Пример. Когда пользователь1 пытается добавить user2, авторизация будет запрашиваться пользователю2 до того, как пользователь1 станет контактом user2. Но поскольку у нас уже есть система контактов в нашем веб-приложении, мы хотим обойти эту авторизацию XMPP или подавить ее и просто авторизировать с помощью команды script/, когда user2 подтверждает user1 как контакт на нашем веб-сайте. Мне пока не ясно, но коллега сказал, что это возможно на модуле ejabberd mod_admin_extra (команда, которая будет создавать подписку без авторизации на стороне клиента). Возможно ли, или мне нужно вручную манипулировать базой данных ejabberd с помощью script (если я передал из дефолтного Mnesia db в другой db, скажем, MySQL).

Спасибо заранее.

Ответы

Ответ 1

Хорошо, вот что мы сделали:

1) Вместо пользовательской аутентификации/внешней аутентификации мы создаем учетные записи пользователей на XMPP после регистрации пользователя.

2) Ответ на этот вопрос - это привязка к сессии, как указал Жюльен. Мы создали PHP script, который создавал бы сеанс и возвращал идентификатор сеанса и RID. Вызывается через AJAX при входе в систему пользователя (после того, как документ готов).

3) Как я уже сказал в комментарии к сообщению Жюльена, мы использовали mod_admin_extra. Мы связались с mod_rest (w/c позволяет вам посылать команды Stanzas/run команды REST) ​​для создания реестров. В mod_admin_extra есть команда * add_rosteritem *, которая вызывается каждый раз, когда пользователи создают контакты на нашем веб-сайте.

Ответ 2

Мы (superfeedr) имеют аналогичное веб-приложение, в котором XMPP является частью приложения.

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

Таким образом, вы можете также войти в систему своих пользователей в веб-приложении, не зная своего пароля или даже сохранить его в ясном:). Простым способом является проверка подлинности сеанса (через Bosh) на сервере и передача идентификатора сеанса в ответ HTML, как описанный здесь, by @metajack.

Третья часть может быть самой сложной, но я действительно уверен, что вы можете обойти это, а не использовать встроенные "реестры"... однако это может быть связано с созданием вашего собственного компонента (внутреннего или внешнего).