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

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

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

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

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

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

Заранее спасибо.

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

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

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

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

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

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

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

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