Регистрация/авторизация в 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, т.е. высылать проверочный код, а потом уже актуализировать авторизацию. Эх, а как не хочется напрягать юзеров лишний раз что то делать!

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

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

Валидатор для JSON строки в PHP

Октябрь 2, 2018 г.

К JSON можно относиться как к одной из разновидностей текстовых форматов передачи данных. Но для PHP это просто ещё одна скалярная строка. Как определить, что перед нами действительно JSON? Чтобы убедиться, придется попытаться декодировать строку. ...

Читать

Программное создание параграфов (ParagraphsItemEntity) в Drupal

Май 24, 2019 г.

Пример кода, как программно реализовать создание параграфа (речь идет о модуле - paragraphs). Обычно параграфы создаются редакторами через админку, но иногда требуется создать новый параграф с помощью кода, например, при импорте данных, структурных ...

Читать

 

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

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



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