Авторизация по емайл (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.

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

Перебираем список свойств известной structure в C#

Июль 8, 2022 г.

Мне нужен был выбор цвета из некоторой палитры, и я обнаружил подходящий список в пакете SkiaSharp, где определена структура SKColors, перечисляющая статические значения цветов. Вот такой список: [crayon-69eac16ab27be210047987/] Я хотел получить ...

Читать

Создание публикации по отправленным данным Contact form 7

Июнь 6, 2018 г.

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

Читать

Удаление неиспользуемых файлов в Drupal

Октябрь 17, 2024 г.

Особенно полезно, когда вы использовали проект как шаблон для другого сайта и надо почистить данные. Друпал хоть и показывает статистику использования файлов, но удалять файлы не позволяет из реестра /admin/content/files. Напишем небольшой скрипт, ...

Читать

XML карта сайта для многоязычных проектов на Drupal

Апрель 16, 2024 г.

Для начала разберемся: что мы пытаемся построить. Ожидается, что у нас есть корневой файл sitemap.xml, который содержит список языковых xml карт. ...

Читать
 

Комментарии к «Авторизация по емайл (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/, там же есть обсуждение некоторых нюансов.