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

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

Вычисление расстояния от точки до отрезка

Июнь 9, 2025 г.

Методика заключается в поиске ближайшей точки на отрезке и зачем вычислении расстояния до этой точки. Немного математики У нас есть три точки ...

Читать

Запрещаем pathauto менять уже созданный путь в публикации при смене заголовка

Июнь 19, 2017 г.

Название статьи выражает общую боль всех SEOшников планеты Земля. :) Если вы используете pathauto в своём проекте на Drupal, то типичная настройка - ...

Читать

Убрать мета тег Generator

Май 17, 2023 г.

Выпиливаем мета-тег Generator из заголовочной секции сайта на Drupal. За одно и пару других лишних мета маркеров. Для этого используем hook_page_attachments_alter в теме оформления сайта. 'Generator' в списке мета информации идет под именем system_meta_generator. ...

Читать

Удалить название типа публикации из адреса кастомного типа публикации

Ноябрь 18, 2017 г.

При создании собственного типа публикации в Wordpress, вы получите ЧПУ, содержащий в самом начале название этого типа материала. Можно ли избавиться от этого? К примеру, вы зарегистрировали тип публикации portfolio: [crayon-69198c67a517c628876253/] ...

Читать
 

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