Интеграция внешних пользователей БД через их API в Drupal 7


Я хочу интегрировать внешний API (REST) для входа пользователей, которые находятся в этой внешней базе данных, с помощью формы входа drupal 7 на моем сайте.

У меня есть спецификации API для входа в систему, регистрации, получения сведений об участнике и регистрации в системе. У меня также есть URL-адрес для проверки запросов GET и POST на этой внешней базе данных.

Как мне интегрировать его с базой данных Drupal, чтобы пользователи могли входить в систему с помощью БД Drupal или внешней БД (интегрированной с API)?

Я только что обнаружил модуль Службы , но не уверен, что это поможет.

Я также не эксперт в создании пользовательских модулей, поэтому любой пример кода или любые указатели действительно помогли бы здесь.

ПРИМЕЧАНИЕ: Внешние запросы API возвращают вывод XML

 1
8
Author: kiamlaluno, 2014-03-07

1 answers

Для реализации внешней аутентификации вам необходимо изменить формы входа в систему (user_login и user_login_block) чтобы изменить их обработчики проверки.

Обработчиками проверки по умолчанию для форм являются user_login_name_validate(), user_login_authenticate_validate() и user_login_final_validate(). Вам нужно будет заменить user_login_authenticate_validate, который используется для проверки предоставленного имени пользователя/пароля в таблице локальных пользователей. Ваша замена должна вызвать ваш API для обработки идентификация.

В зависимости от ваших потребностей, вы можете предоставить автоматическую регистрацию (на сайте Drupal) нового пользователя при аутентификации. В таком случае вы можете использовать user_external_login_register() функция для создания учетной записи с вашей замены user_login_authenticate_validate.

Чтобы сопоставить пользователя Drupal с пользователем во внешней системе, Drupal предоставляет user_get_authmaps() и user_set_authmaps() функции. Обратите внимание, что это пользовательское сопоставление автоматически обрабатывается при использовании user_external_login_register() и user_external_load() функции.

Для выполнения ваших HTTP-запросов вы можете использовать drupal_http_request() функция, которая обычно выполняет эту работу и поддерживает HTTPS. Конечно, вы также можете использовать другую HTTP-библиотеку.

Все это должно быть сделано в пользовательском модуле , и вам потребуется хорошее понимание API форм Drupal .

Комментарий на странице документации для user_external_login_register() содержит подробное объяснение всего процесса.

Примечание: Модуль сервисов полезен, когда вам нужен API на основе HTTP для чтения/записи данных вашего сайта Drupal. В вашем случае это было бы бесполезно, так как вам нужно использовать существующий API для аутентификации пользователей.

 1
Author: Pierre Buyle, 2014-03-07 13:39:34