Users: Зарегистрированные пользователи

Компонент позволяет добавить на сайт возможность регистрации пользователей, авторизации с запоминанием пароля или без, редактирование профиля, и т.п.

Документация

Читать

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

Страницы контроллера

Сразу после установки компонента доступны следующие страницы:

  • /users/registration/ - страница регистрации
  • /users/login/ - страница с формой входа на сайт
  • /users/logout/ - выход из учетной записи
  • /users/home/ - личный кабинет
  • /users/genpassword/ - восстановление пароля
  • /users/newemail/ - новый email
  • /users/avatar/ - загрузка, смена аватара

Регистрация

Форма регистрации состоит из двух групп полей - поля с основными данными(имя, логин, пароль, email) и поля с анкетными данными (по умолчанию - пол, дата рождения, город). Поля из первой группы являются обязательными для заполнения и играют важную роль в логике работы контроллера. Не позволяется использовать уже существующие в таблице логин, пароль и имя. Имя дополнительно проверяется на схожесть с уже существующими именами(например luk и 1uk) и при нахождении такого соответствия выдается сообщение с просьбой сменить имя. Для этого используется генерируемое поле name_base. Так как для каждого отдельного сайта могут понадобится совершенно различные данные о пользователе, то полями в анкетных данных можно управлять.

Добавление поля в анкетные данные

Для добавления нового пункта в анкету необходимо добавить соответствующее поле в таблицу БД users через настройку schema(./config/schema.php). После чего добавить поле для редактирования через настройку questionnaire.php. В качестве полей используются CMS.Fields и используется соответствующий набор типов полей и настроек. Поле станет доступно для заполнения в форме регистрации и редактирования в личном кабинете.

После регистрации

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

Вход на сайт

Контроллер по умолчанию предоставляет страницу с формой входа на сайт. Для вывода формы входа(как и других форм компонента) в другом месте сейчас можно использовать объект CMS::objects()->users_forms. Получение формы для входа выглядит так:

// данный метод вернет объект класса Forms_Form, который будем использовать для вывода формы.
CMS::objects()->users_forms->login()

В компоненте есть возможность использовать сторонние сервисы для входа на сайт с помощью механизмов openid и oauth. Настройка провайдеров сторонней аутентификации осуществляется в ./config/providers.php

OpenID

По умолчанию включены следующие сервисы - google, yandex, yahoo, livejournal, mail.ru. Чтобы добавить новый сервис, добавляем новую запись в массив с индексом openid и создаем иконку с соответствующим именем в папке /images/logos32x32(или можно указать адрес картинки в параметре image). Для настройки простейшего сервиса достаточно указать только соответствующий url, например:

  'google' => 'https://www.google.com/accounts/o8/id'

Если для формирования url необходимы дополнительные параметры, то используем параметр ask:

  // простой пример, для формирования url нам нужен только логин пользователя в livejournal
  'livejournal' => array(
    'url' => 'http://{ask_name}.livejournal.com', // в качестве шаблона для замены используем {ask_имя_поля}
    'ask' => array(
      'name' => 'Ваш логин в ЖЖ:', // краткая запись поля, ключ - название поля, значение - заголовок. Будет выведен этот заголовок с текстовым полем для ввода
    )
  ),

  // для url нужны уже два параметра - имя пользователя и домен
  'mailru' => array(
    'url' => 'http://{ask_name}.id.{ask_domain}',
    'ask' => array(
      // текстовое поле
      'name' => 'Ваш адрес:',
      // поле с выпадающим списком
      'domain' => array(
        'caption' => '@',
        'select' => array(
          'mail.ru' => 'mail.ru',
          'inbox.ru' => 'inbox.ru',
          'bk.ru' => 'bk.ru',
          'list.ru' => 'list.ru',
       )
     )
   )
  ),

OAuth

Настройка данного механизма несколько сложнее. Сложность заключается в том, что нам необходимо получить параметры key и secret, необходимые для взаимодействия с сервисом аутентификации, причем для каждого провайдера в отдельности. В файле providers.php в закомментированном виде лежат настройки основных сервисов - vkontakte, facebook, twitter. Для добавления нужного сервиса нам нужно скопировать настройки оттуда и заменить consumer_key и consumer_secret на свои.

Как это сделать рассмотрим на примерах основных сервисов.

Vkontakte

  • Заходим по ссылке http://vk.com/editapp?act=create&site=1 и добавляем приложение.
  • При Выбираем тип "Веб-сайт", вводим адрес сайта и домен(при неправильно введенных данных приложение работать не будет).
  • Название приложения надо сделать адекватным и понятным, так как оно будет отображаться пользователю при попытке аутентификации.
  • После подтверждения по телефону(!), мы переходим на страницу приложения.
  • Выбираем вкладку настройки. Там будут нужные нам параметры - ID приложения(consumer_key) и Защищенный ключ(consumer_secret)

Facebook

  • Заходим по ссылке https://developers.facebook.com/apps , регистрируемся как разработчик(подтверждение по телефону).
  • Нажимаем создать новое приложение.
  • Вводим адекватное имя приложения, оно будет отображаться посетителю
  • Выбираем любую категорию и нажимаем кнопку Создать
  • Попадаем на страницу приложения, вверху будут поля Идентификатор приложения и App Secret. Это и есть наши искомые коды, копируем их в настройки.
  • Переходим во вкладку Настройки. Нажимаем добавить платформу, выбираем веб-сайт, и вставляем в появившееся поле Site URL url нашего сайта. В поле App Domains вставляем домен нашего сайта. Нажимаем сохранить.

Twitter

  • Заходим по ссылке https://dev.twitter.com/apps, нажимаем Create a new application;
  • Заполняем поля;
  • Название приложения придумываем адекватное, так как оно будет отображаться пользователю;
  • Обращаем внимание на корректность Website(ссылка на сайт, где будет авторизация). Следует учесть что здесь должен быть точно тот сайт, с которого будут поступать запросы. Для разработки можно указать тут ссылку на локальный сайт, но при переносе на хостинг необходимо обязательно поменять url на основной сайт;
  • Хоть поле Callback URL и не отмечено, заполняем его обязательно ссылкой такого вида
 http://yousite.com/users/oauth/twitter/callback/

где меняем yousite.com на свой домен. Сайты на workspace не получится использовать, так как их адреса не являются валидными для системы.

  • После этого попадаем на страницу, где на вкладке API keys получаем заветные параметры.

Связь с другими компонентами

Зачастую компонент Users необходим для использования информации о пользователе в других компонентах. Объект текущего пользователя доступен из любого компонента следующим образом:

WS::env()->auth->user

Отсутствие объекта говорит о том, что текущий посетитель не залогинен на сайте.

Права доступа

Компонент предоставляет следующие инструменты для использования в проверке прав доступа.

Пользователя можно назначить администратором через систему администрирования, выставив соответсвующий чекбокс. Проверка является ли пользователь админом осуществляется следующим образом:

$user->isadmin

В компоненте есть возможность создавать свой набор групп пользователей, а затем определять принадлежность к той или иной группе. Нужно это, например, для разграничения доступа в других компонентах. Группы доступа редактируются через систему администрирования, после их добавления они появляются на соответствующей вкладке на странице редактирования пользователя. Пользователь может принадлежать к нескольким группам сразу. Проверка принадлежности пользователя к группе осуществляется следующим образом:

$user->check_access('managers'); // проверка принадлежности к одной группе
$user->check_access('managers,redactors,users'); // проверка принадлежности к нескольким группам

Так же есть методы, определяющие права пользователя на публикацию, на бан других пользователей, а так же дающие возможность проверить не забанен ли пользователь. Они могут быть легко переопределены под логику вашего проекта.

$user->can_post(); // по умолчанию возвращает true
$user->can_ban(); // возвращает true, если пользователь - администратор
$user->is_banned(); // возвращает false

Структура компонента и настройки

Все настройки находятся в папке config, в том числе схема, поля системы администрирования и тд. О такой реализации структуры подробнее можно почитать тут. Рассмотрим доступные настройки:

  • admin_menu - пункты меню в системе администрирования(в меню компонентов)
  • avatar - настройки аватара пользователя - доступные разрешения, максимальный вес изображения, размер изображения по умолчанию
  • fields - поля для системы администрирования - как для страницы редактирования, так и для списка
  • genpassword - настройки генерируемого пароля(длина и символы)
  • messages - текстовые сообщения, используемые в компоненте
  • providers - сторонные сервисы аутентификации, и openid и oauth
  • questionnaire - поля для анкетных данных
  • schema - собственно схема таблиц БД
  • services - сервисы компонента, можно добавить свой и он будет доступен через компонент CMS::component('Users')->service('имя_сервиса')
CMS::component('Users')->service('имя_сервиса')
  • tabs - вкладки на страницах редактирования

Все версии

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


Версия Дата
5.0.24
Изменения
Поддержка https
29.01.2018
5.0.23 29.06.2016
5.0.22 22.06.2016
5.0.21 10.07.2015
5.0.20 10.07.2015
5.0.19 08.04.2015
5.0.18 05.02.2015
5.0.17 28.01.2015
5.0.16 19.01.2015
5.0.15 12.11.2014
5.0.14 06.11.2014
5.0.13 07.07.2014
5.0.12 04.06.2014
5.0.11 23.05.2014
5.0.10 22.05.2014
5.0.9 21.04.2014
5.0.8 26.02.2014
5.0.7 31.01.2014
5.0.6 31.01.2014
5.0.5 30.01.2014
5.0.4 25.12.2013
5.0.3 23.12.2013
5.0.2 05.12.2013
5.0.1 31.10.2013
5.0.0 08.10.2013
4.3.2 07.10.2013