Авторизация по емайл (email) в CMS Drupal

Сейчас куда ни глянь, пошла мода в качестве имени при авторизации использовать не пресловутый login, а адрес электронной почты. И это действительно удобно. Адрес почты уникален для каждого пользователя, хорошо запоминается самим пользователем и не возникает проблемы вроде той, когда при регистрации вам говорят, мол, извините, но пользователь «Яша» уже существует, попробуйте «Яша1, Яша2 или Яша3».

Базовая система регистрации в drupal (друпал) требует от пользователя ввести логин и адрес электронной почты. При этом пароль генерируется сайтом и отправляется на указанный email. Оба введенных значения должны быть уникальны для сайта. Мне кажется, что логичным будет для одного уникального пользователя требовать одного уникального значения (email). Логин оказывается лишним, т.к. email нам необходим для отправки пользователю пароля. Сделаем две вещи.

  • Пусть сайт не требует ввода логина при регистрации, пусть он генерируется автоматически. Пусть это будет какой то набор цифр (вроде номера телефона или ICQ).
  • Авторизация на сайте производится как по сгенерированному номеру (логину), так и по адресу электронной почты.

Избавляемся от поля «login» при регистрации.

Начать стоит с создания папки модуля. Назовем этот модуль, для определенности, mailLogin. Запрограммируем зацепку к форме регистрации, которая прячет поле логин, и добавляет обработчик к отправке формы регистрации.

В зацепке использованы имена двух новых функций. Первая из них _mailLogin_generateLogin() должна нам вернуть сгенерированный автоматически login, правильный с точки зрения системы и ещё пока никем на сайте не использованный. Вот пример реализации такой функции.

Вторая функция — _mailLogin_afterregister() вызывается после регистрации пользователя и может содержать переход на какую то страницу с информацией для нового пользователя (ф-ция drupal_goto(«uri_page_where_to_go»)), выполнять какие  то дополнительные действия, связанные с самой регистрацией, и т.д. И это к предмету разговора не относится, но пользуясь возможностью, демонстрирую, как наладить альтернативное движение пользователя после регистрации. Методов на самом деле много, и этот метод как вариант среди них.

Двойная авторизация (как по email так и по login-у)

Фактически мы никак не нарушили механизм регистрации. У нас есть уникальный логин и уникальный email. Другое дело, что пользователю не пришлось придумывать себе логин и вводить его при регистрации. Теперь добавим код, который поможет нам авторизоваться по введенному пользователем адресу электронной почты. Все намного проще, чем можно себе представить. Следующий php-код нужно вставить просто как часть кода нашего модуля (он выполняется вне какой либо функции).

Мы проверяем, не отправляются ли данные авторизации (код формы user_login). Проверяем, не является ли login по сути email и ищем пользователя с таким email в базе данных. Выбрав логин этого пользователя из базы, мы подставляем найденное значение вместо логина в массив _POST. Далее, CMS сама уже отрабатывает необходимые действия, связанные с авторизацией, как это происходило бы без нашего вмешательства.

И вам уже решать нужно ли эти 10-15 строк оформлять отдельным модулем :). См. также авторизацию по номеру телефона в Drupal 7.

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

Эффект, затрудняющий прочтение текста

Август 1, 2018 г.

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

Читать

Перелицовка Евы

Октябрь 14, 2012 г.

Очередная перелицовка Евы. Это уже третий по счету дизайн. За одно переехали с wordpress на drupal. На этот раз мы решили сделать сайт, направленный на ...

Читать

Удаление пользователей в WP, обновление плагина Inactive user deleter

Сентябрь 4, 2017 г.

Плагин продолжает мной развиваться по заявкам пользователей. Вот что было добавлено в версию 1.42. На этот раз обратился пользователь Manish Khullar, ...

Читать

Вызов одного конструктора в другом в Kotlin

Январь 21, 2025 г.

Если вы переходите с java на kotlin, то у вас часто возникают вопросы вроде - как сделать на kotlin то, что вы делали на java вот так и так. В java вызов перегруженного конструктора в другом конструкторе класса выглядит следующим образом. Представим, ...

Читать
 

Комментарии к «Авторизация по емайл (email) в CMS Drupal»

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



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

Много комментариев в “Авторизация по емайл (email) в CMS Drupal”

  1. Walter:

    Есть аналогичное решения или готовый плагин для WordPress?

    • С готовыми плагинами не встречался, но даже если не удастся подобрать нужный хук вот в api-кодексе, то можно написать свой виджетик с формой авторизации, где email будет преобразовываться в login и передаваться на авторизацию встроенными средствами WP.

  2. Aleksey:

    Спасибо!
    Сам начинаю потихоньку разбираться и очень помогло.

    Я так понимаю что заместо
    » $res = db_query(«SELECT uid FROM users WHERE name = ‘$UIN'»);
    } while (mysql_num_rows($res));»

    можно написать

    «$res = user_load(array(‘name’ => $UIN));
    } while ($res);
    »
    ?
    Или тут есть какие-то «камни»? Естественно кроме производительности)

    • Я думаю, вы вполне можете использовать любые понравившиеся вам конструкции :). Камни если возникают то при переходе с одной версии drupal на другую, что происходит в жизни проектов довольно редко.

  3. sat:

    логин можно и железно сгенерить, чтобы не делать запрос к базе.

    $UIN = time().rand(100, 999);

    В таком варианте вероятность практически равна нулю.

  4. Сергей:

    Как можно сделать, чтобы идентификатором на сайте служил не email, а номер телефона? Механизм отправки СМС существует, но как сделать так, чтобы мог зарегиться человек, не имеющий электронной почты?

    • Интересная тема, Сергей. Это в отдельной статье нужно писать уже. Вкратце, если сохранять поле email, а поле с тел добавить в профиль, то можно выполнить авторизацию по точно такой же схеме, как в статье. Получится как во вконтакте, где можно авторизироваться по email и по номеру телефона. Будут и некоторые нюансы, конечно.

      Более подробно можно прочитать вот тут — http://shra.ru/2015/10/avtorizaciya-po-nomeru-telefona-v-drupal/, там же есть обсуждение некоторых нюансов.