Openid С Человеческим Лицом В Drupal

Начиная с 6 версии Drupal, в систему входит модуль OpenID, обеспечивающий авторизацию по протоколу OpenID. Но у модуля есть довольно серьезные проблемы.

В частности, сам модуль реализует антипаттерн, описанный Иваном Сагалаевым в своем блоге .

Вторая проблема модуля, с точки зрения юзабилити, это непрозрачная авторизация по OpenID, а если быть точнее, то при первой попытке авторизации через определенный аккаунт OpenID система просит заполнить определенное количество полей.

.

В общем, лично я не вижу ничего особо плохого в заполнении небольшого количества полей (тем более, что в некоторых случаях часть полей заполняется автоматически, но об этом ниже) — причина тому в архитектуре Drupal. .

Учетные записи OpenID привязаны к реальным учетным записям Drupal, т.е.

при успешной авторизации у провайдера OpenID Drupal пытается сопоставить учетную запись OpenID с учетной записью Drupal. Если такого соответствия не обнаружено, система предложит зарегистрировать новую учетную запись, для чего необходимо заполнить определенное количество обязательных полей – в общем, это уникальное имя пользователя в системе и адрес электронной почты.

Если совпадение найдено, пользователь авторизуется.

В профиле пользователь может добавить любое количество учетных записей OpenID, которые будут связаны с его учетной записью Drupal. С тем, как работает OpenID в Drupal, все более-менее понятно.

Но вопросы по удобству использования никуда не делись — ссылку внизу блока авторизации нельзя назвать очень удобным решением.

В блоге Ивана, о котором я писал выше, был представлен один из возможных прототипов решения этой задачи, реализацию которого я начал реализовывать для Drupal. Как и что было написано — думаю, в данном случае это не имеет особого значения — в конце концов все распространяется в виде исходников.

Давайте сразу к делу - что произошло =) Мы получили систему, позволяющую с помощью определенного набора API подключить дружественную (насколько мне удалось) поддержку определенных OpenID-провайдеров, плюс к ней добавилась дополнительная возможность в виде подключаемых блоков тем оформления.

Немного подробнее обо всем и с картинками =) Думаю, что нет необходимости рассказывать о том, как устанавливаются модули в Drupal, но при необходимости советую прочитать моя предыдущая статья , где я описал основы работы с этой системой.

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

Теперь можно приступить к настройке.

Пойдем Управление пользователями -> Расширения OpenID и попасть в настройки провайдеров OpenID.

OpenID с человеческим лицом в Drupal

В настройках (функционирование которых я скопировал из модуля Блоки =)) вы можете подключать/отключать доступные провайдеры, а также устанавливать их порядок.

Последнее удобно, когда вы знаете, что большинство авторизаций по OpenID на вашем ресурсе приходят, например, из Живого Журнала — тогда вы ставите ЖЖ на первое место и он будет выбираться по умолчанию при загрузке страниц, на которых отображается блок.

Там же можно найти вкладку Темы , нажав на который вы увидите список доступных тем.

Темы определяют внешний вид формы авторизации OpenID. Базовый пакет (на момент написания статьи в блоге другого не существует =)) содержит 2 темы:

Выбрав понравившуюся тему оформления и настроив провайдеры OpenID, вы можете перейти к настройкам блока ( Создание сайта -> Блоки ), добавьте блок под названием Расширения OpenID в нужный регион, задайте его положение и при необходимости настройте фильтр отображения блока на страницах.

Настраивать фильтр видимости по роли нет смысла — в любом случае блок виден только неавторизованным пользователям.

После успешной авторизации у провайдера OpenID, при первой попытке входа, как я писал выше, Drupal перенаправляет пользователя на страницу регистрации, где пытается заполнить поля формы значениями, полученными от провайдера.

Если провайдер OpenID реализует SRE (Simple Registration Extension) и обязательные поля в вашем профиле заполнены, то эти поля в регистрационной форме заполняются автоматически.

Например, в моем аккаунте на Яндексе была заполнена вся необходимая информация - при попытке входа Яндекс спросил, хочу ли я разрешить авторизацию для ресурса example.com и разрешаю ли я перенести 2 поля на этот ресурс - Алиас и электронная почта.

Если процедура регистрации завершена успешно в автоматическом режиме (т.е.

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

в систему.

Если необходимые данные не заполнены или провайдер не предоставляет такие данные (например, Google, который не реализует SRE, а только AX, который не поддерживается модулем OpenID в Druapal) система выдаст ошибку и попросит ввести недостающие поля вручную.

Также, если провайдер OpenID не предоставляет Псевдоним, то поле «Имя пользователя» заполняется значением идентификатора OpenID. Для решения этой проблемы в модуле предусмотрен небольшой обходной путь, но он работает только у некоторых провайдеров — в базовой комплектации только с Живым Журналом и Яндексом.

В общем, пропатчив модуль OpenID Мне удалось получить адрес электронной почты от Google, поэтому в будущем думаю немного расширить функционал модуля, а для некоторых провайдеров написать свои обработчики, которые заменят стандартные.

Также были планы приложить руку к модулю OpenID , часть Drupal 7, которая недавно перешла в режим заморозки функций.

Ну а пока всё работает так, как работает. Также следует отметить, что модуль Расширения OpenID «подчищает» некоторые аспекты модуля OpenID , а именно удаляет ссылки из форм входа (в блоке и на отдельной странице), переводя эти формы в режим авторизации OpenID - поведение штатного модуля повторяется провайдером Любой OpenID , который включается по умолчанию при установке модуля.

Вот, пожалуй, и все, что я собирался вам рассказать об улучшении удобства использования авторизации OpenID в Drupal. Модуль на данный момент можно скачать только на моем сайте в разделе Проекты .

После того, как модуль немного почистят, ему будет присвоено (не могу придумать русский эквивалент этого слова) Drupal.org , о чем я сообщу вам позже.

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

Анонс проекта обязательно будет опубликован =) Вот это точно =) Жду отзывов/баг-репортов/предложений/пожеланий в комментариях.

PS, на данный момент есть некоторые проблемы с отображением дизайна Аккордеон в некоторых темах Drupal. В частности, дизайн не совсем корректно работает с темой.

ЛайтВорд .

УПД: В настоящее время модуль проходит проверку кода на сайте Drupal.org .

УПД2: Для тех, кто получает ошибку при попытке входа в Google, Google использует https, поэтому PHP должен быть собран с поддержкой OpenSSL (в Ubuntu достаточно установить пакет openssl, если я не ошибаюсь).

УПД3: обновился до версии 0.6.5, в ней: - добавлен новый провайдер Chi.mp. — добавлена возможность проверить доступность провайдера - реализована проверка google и chi.mp - теперь оба недоступны, если нет поддержки openssl, о чем будет уведомление в администрации провайдеров.

Теги: #drupal #openid #Юзабилити #drupal

Вместе с данным постом часто просматривают: