Пользователи и авторизация

Урок 8 из 8

25 мин

Немного теории

Пользователи

Сложные современные сайты (маркетплейсы, личные кабинеты, сервисы) предполагают авторизацию пользователей. Ранее мы рассмотрели добавление пользователей путем самостоятельной регистрации через публичную часть и создание пользователей через форму в разделе администратора.

При переносе базы пользователей из другой системы в «1С-Битрикс: Управление сайтом» оба этих способа будут неудобными. Поэтому в системе есть возможность массового импорта списка пользователей через CSV-файл.

Для импорта обязательно наличие следующих столбцов:

  • NAME (Имя)
  • LAST_NAME (Фамилия)

Остальные поля система может «додумать», если они не будут указаны:

  • PASSWORD (пароль) генерируется случайным образом
  • EMAIL (E-mail) составляется по настройкам сайта
  • LOGIN (Логин) составляется из имени и фамилии

Если вы хотите, чтобы пользователи проходили авторизацию по почте, а не по логину, то перед импортом CSV нужно в любом редакторе табличных файлов скопировать колонку EMAIL и переименовать ее в LOGIN. Тогда в этих полях пользователей будут одинаковые значения.

Если в настройках Главного модуля установлены настройки «Номер телефона является обязательным», «Email является обязательным полем», то эти поля также должны указываться в CSV-файле

Сразу после импорта пользователи могут пройти авторизацию и попасть на сайт. Если пароль был сгенерирован, то они должны начать свою работу со страницы «Я забыл свой пароль», так как способа узнать его нет — в БД пароль хранится в виде хэш-суммы.

Механизм восстановления пароля

Для хорошего разработчика важно понимать процедуру восстановления пароля в «1С-Битрикс: Управление сайтом». Главное — понять что пароль не «восстанавливается», а создается новый.

На первом шаге этой процедуры пользователь должен указать свой E-mail. Если такая почта зарегистрирована в системе, на нее будет выслано служебное письмо с уникальной ссылкой на страницу создания нового пароля. Уникальной ссылку делает зашитый в нее сгенерированный ключ специально созданный для этого пользователя.

Почему бы сразу не генерировать новый пароль? Ответ простой — тогда у злоумышленника или просто невнимательного человека будет способ обновлять пароли любых пользователей. Поэтому такая важная процедура выполняется исключительно в 2 этапа.

Перейдя по ссылке, пользователь может указать новый пароль. Если ссылка была корректной (с корректным ключом), пароль будет обновлен и пользователю придет новое письмо об успешной смене пароля. А уникальной ссылкой для смены пароля больше никто не сможет уже воспользоваться.

Группы пользователей

Основной инструмент для объединения пользователей в системе — группы пользователей. Выделение групп — небольшой, но важный этап проектирования и разработки сайта.

Пользователь может быть добавлен в произвольное количество групп. В интерфейсе администратора сайта пользователей можно фильтровать по группам или массово перемещать между ними.

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

Помимо логической группировки пользователей, на основе системы групп в «1С-Битрикс: Управление сайтом» построена система прав. Функциональные ограничения привязываются именно к группам: доступ к инфоблокам, файлам сайта, профилю, настройкам модулей и прочим системным функциям.

Даже если активная работа в административном разделе не предполагается, названия групп должны быть очевидными. В реальных проектах используют два способа именования:

  • От терминологии заказчика. Если бизнес использует слова «дилер», «кладовщик», «первостольник» — это отличный вариант названия групп. Тем более, что в таких случаях бизнес сможет четко объяснить, какими полномочиями эти пользователи отличаются.
  • От прав доступа. Особенно это полезно при развитии уже существующего проекта при тестировании новых гипотез. Примеры таких групп: «Пользователи с правом покупать по оптовым ценам», «Пользователи, которые могут оставлять отзывы».

Компоненты для работы с пользователями

В системе есть 4 основных действия с авторизационными данными пользователя:

  1. Самостоятельная регистрация нового пользователя (с подшагами — инициализация регистрации, подтверждение регистрации)
  2. Авторизация
  3. Запрос ссылки на смену пароля
  4. Смена пароля

Для каждой операции существует как минимум 2 подходящих компонента, system.auth.* (системный) и main.auth.* (публичный). Эти компоненты со ссылками на документацию приведены в таблице ниже.

Компоненты Назначение
main.auth.form
system.auth.authorize,
system.auth.form
Форма авторизации
main.auth.changepasswd
system.auth.changepasswd
Форма смены пароля
main.auth.forgotpasswd,
system.auth.forgotpasswd
Форма запроса ссылки смены пароля
system.auth.initialize Системный компонент инициализации регистрации
main.register,
system.auth.registration
Форма регистрации
system.auth.confirmation Страница подтверждения регистрации

Системные компоненты умеет подключать сам фреймворк, если видит в этом необходимость. Если сайт закрыть от анонимных пользователей (NEED_AUTH или вызов CMain::AuthForm), то при посещении любой страницы, авторизованный пользователь увидит обычное содержимое страницы, а неавторизованный — форму входа, отрисованную компонентом system.auth.authorize. При этом header.php и footer.php шаблона сайта выполнятся в обоих случаях.

Остальные компоненты будут подключаться при следующих условиях:

Компоненты Назначение
system.auth.forgotpasswd
  • forgot_password=yes в GET-запросе
system.auth.changepasswd
  • change_password=yes в GET-запросе
system.auth.registration
  • register=yes в GET-запросе
  • Установлен флаг “Позволять ли пользователям регистрироваться самостоятельно?” в настройках главного модуля new_user_registration
system.auth.confirmation
  • confirm_registration=yes в GET-запросе
  • Установлен флаг “Запрашивать подтверждение регистрации по email” в настройках главного модуля

Вы можете изменить шаблон нужного вам компонента, чтобы он соответствовал дизайну сайта. По-умолчанию фреймворк подключает во всех случаях шаблон компонента “.default”. В настройках главного модуля, во вкладке “Авторизация” можно указать желаемое название шаблона в поле “Шаблон системных компонентов авторизации (system.auth.*)”

картинка

Системные компоненты авторизации написаны в процедурном стиле, в отличии от main- компонентов авторизации, которые написаны в ООП парадигме. Мы не сможем расширить системный компонент авторизации без его копирования.

Системные компоненты сами не авторизуют и не регистрируют пользователя, только выводят html формы. Логика регистрации/авторизации происходит в прологе, в ядре фреймворка. Результат этой обработки сохраняется в поле $APPLICATION->arAuthResult. Эти данные передаются в системные компоненты как параметр $arParams[“AUTH_RESULT”]. Это приводит к неочевидным последствиям (см. далее).

Компоненты “main” в этом плане отличаются. Они не только выводят форму, они сами ее и обрабатывают.

Создание раздела с авторизацией

Таким образом, можно назвать 4 способа создания страниц авторизации:

  1. Описанный в курсе “Администратор. Базовый” с помощью system.auth.* компонентов
  2. Аналогичный способ с помощью main.* компонентов
  3. Объявление константы NEED_AUTH
  4. Вызов CMain::AuthForm

Самый наглядный способ — через компоненты. Именно так работают все прочие страницы и разделы фреймворка. Их можно разместить на любой странице, задав желаемый URL, детально настроить или даже переопределить. Но нужно будет самостоятельно создать все разделы и папки, вызвать компоненты и не забыть поправить почтовые шаблоны, в которых будет ссылка на страницу восстановления пароля и регистрацию.

Важная особенность компонентов system.auth.* — их нельзя размещать на одной и той же странице. У всех таких компонентов сообщение об ошибке или успехе хранится в одной и той же переменной. Поэтому в случае ошибки или успеха одной формы, все остальные покажут такой же результат.

Константа или вызов метода легко не заметить при работе с сайтом. Также при выборе последних 2-ух вариантов у разработчика не будет возможности повлиять на формируемый адрес страницы. Но это самый быстрый способ создать раздел с авторизацией.

Практика

В этом видео рассмотрим работу с пользователями и авторизацией.

Пользователи и авторизация

11 мин