Регистрация/авторизация в Drupal по учетке в соц.сетях

Самое не приятное, с чем можно встретиться на многих сайтах — это регистрация учетной записи. Неприятное ощущение усиливается ещё и от контраста — везде написано — как мы рады вас видеть, подписываетесь, голосуйте, покупайте и т.п. И вот вы решаете как то поучаствовать в проекте и жмете кнопку «регистрация». Вот тут, обычно, для пользователя начинается самое не приятное.

Глазами пользователя

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

За это время можно расхотеть «покупать», комментировать и вообще смотреть на этот сайт. Тем более, что у вас есть куча учеток в соц. сетях (СС), и заводить ещё одну новую на каком то «левом» сайте вы не собирались.

Глазами программиста

Программистов тоже можно понять. Во-первых, спамеры, во-вторых, сеошники. Лезут во все дыры сайта, суют свои поганые ссылки на «энладж ё пенис» и «чиап лоан». Вот и вырастают заборы из кептч, проверок, анкет….

И на эти заборы кроме спамеров натыкаются и те, кто, возможно, собирается что то купить на сайте, а терпения на форму регистрации у них уже может не хватить.

Глазами OPEN-ID

Казалось бы давно решенная проблема. Есть же авторизация/регистрация по OpenID. В drupal встроена в ядро. Но пользователь, который только что вылез из ВКонтакте, скорее всего даже слов таких не слышал и пройдет мимо данной возможности.

Loginza.ru

И вот специально для таких «друзей» есть openid провайдер loginza.ru. Кроме собственно самой учетки стандарта Open ID 2.0, сервис интегрирован в соц.сети и может от туда передать данные пользователя. Т.е. можно получить данные учетной записи из любимой юзером СС., а процесс регистрация-проверка-авторизация сведется к нескольким кликам мыши.

Глазами Drupal

На логинзе есть какой то сторонний вариант-заготовка для drupal. Можете попробовать его. Впрочем, я не получил того, что мне было нужно. Давно известно, что «хочешь сделать что то хорошо, сделай это сам».

Итак, задача. Пользователь по данным из соц. сети должен получить учетку в drupal. Если значение поля email передаётся из СС, и оно уже есть в базе — авторизуемся под учеткой данного пользователя (очень удобно, но довольно небезопасно!). Если данных о email нет или в базе нет такой почты — пытаемся регистрировать нового пользователя. Все это будем решать для Drupal версии 6. (Для 7-й мне кажется даже переделывать ничего не придется, не проверял).

При регистрации drupal требует 2 вещи — придумать логин и сообщить e-mail. Данные, полученные из СС, могут не содержать ни того ни другого. Единственно, что «железно» сообщается — это уникальная ссылка на профиль пользователя в этой СС.

Регистрируя пользователя «изнутри» можно обойтись и без e-mail, т.к. база данных не требует от этого поля (users.mail) быть уникальным. Важно только сгенерировать уникальное имя пользователя (users.name).

Далее подробно по шагам…

Готовим почву на loginza.ru

Здесь нужно создать учетку. В аккаунте добавьте пару «виджетов» для вашего сайта. Логинза отличает сайт с www и без — потому придется делать два.

loginza-step-1

Нужно будет подтвердить права на сайт, и дальше перейдите к настройкам.

loginza-step-2

Тут следует обратить внимание на галку — «Безопасный режим…». Это наш вариант. А коды (ID и skey) будут использованы далее в программе.

Код виджета

С логинзы надо взять образец HTML кода для вставки на ваш сайт. Есть несколько вариантов, все они содержат в своих параметрах обращение к api логинзы с запросом вида

Стоит поменять переменную token_url на какую то более универсальную запись (мы тут пишем, напоминаю, на php для drupal):

так мы учтем оба варианта — с www и без оного. А страницу /user_profile мы запрограммируем для анализа данных отправляемых сайту с loginza.ru

Модуль в drupal

Вы можете создать новый модуль для друпал или использовать существующий для размещения следующих hook-ов и объявлений. Пусть модуль называется «loginza» для определенности.

Создаём раздел сайта — вход для обработки данных авторизации

далее сам обработчик.

Небольшой кусочек сервисной библиотеки. Тут только ф-ция генерации пароля.

Последний штрих — нужно добавить поле identity в табличку users. Там будет сохранятся единственный железно передаваемый параметр из loginza.ru. Это поможет нам вторично пустить пользователя в эту же учетку. Можно было бы сохранять эти данные в поле users.data. Но проверять по сериализованному значению не очень удобно, да и вообще не понятно, что там может сохранять сам друпал.

Так что выполните в базе команду вида —

Узкие места

Еще раз опишу узкие места. Они не являются неустранимыми, обращаю на них ваше внимание.

Не уникальность имени. В данном варианте код не может зарегистрировать двух пользователей с одинаковым именем. Это не удобно. Будет выдано соответствующее сообщение.
Решение: Можно придумать какую то схему уникализации.

Авторизация по существующему в базе email. Программа доверяет данным из СС, и считает, что e-mail проверен на принадлежность пользователю. Это не всегда может быть так. Тогда злоумышленник, зная email админа, к примеру, регистрируется в какой то CC. Добивается там нужного значения email — и дело сделано, мы имеем взлом аккаунта.
Решение: Тут простой путь только один — проводить проверку e-mail, т.е. высылать проверочный код, а потом уже актуализировать авторизацию. Эх, а как не хочется напрягать юзеров лишний раз что то делать!

Написать комментарий

Мало букафф? Читайте есчо !

Чем заменить drupal_mkdir() в Drupal 10

Февраль 22, 2024 г.

В Drupal 10 множество функций работы с файловой системой было собрано в сервис file_system. В том числе и drupal_mkdir была перенесена туда. В общем случае это выглядит для D10 вот так: [crayon-673667a3e4b93967181521/]

Читать

Рендеринг нужного блока в Drupal 7

Июль 12, 2015 г.

Не всегда удобно выводить блоки в определенные шаблоном регионы. Как вывести произвольный блок в нужном месте шаблона? Для решения этой задачи пришлось не много покопаться в коде движка. Результатом копания стала вот такая функция: [crayon-673667a3e4db8986336935/] ...

Читать

 

Комментарии к «Регистрация/авторизация в Drupal по учетке в соц.сетях»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: