Интеграция внешних пользователей БД через их API в Drupal 7
Я хочу интегрировать внешний API (REST) для входа пользователей, которые находятся в этой внешней базе данных, с помощью формы входа drupal 7 на моем сайте.
У меня есть спецификации API для входа в систему, регистрации, получения сведений об участнике и регистрации в системе. У меня также есть URL-адрес для проверки запросов GET и POST на этой внешней базе данных.
Как мне интегрировать его с базой данных Drupal, чтобы пользователи могли входить в систему с помощью БД Drupal или внешней БД (интегрированной с API)?
Я только что обнаружил модуль Службы , но не уверен, что это поможет.
Я также не эксперт в создании пользовательских модулей, поэтому любой пример кода или любые указатели действительно помогли бы здесь.
ПРИМЕЧАНИЕ: Внешние запросы API возвращают вывод XML
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 для аутентификации пользователей.