Фреймворк Webasyst позволяет разработчику приложения реализовать механизм регистрации и авторизации (входа с паролем) для посетителей сайта.
В качестве примера, в котором реализована описанная ниже система авторизации пользователей во фронтенде, рекомендуем посмотреть приложение «Гостевая книга 2».
Включение авторизации на сайте
Авторизация настраивается отдельного для каждого сайта, подключённого к аккаунту Webasyst, в приложении «Сайт», которое сохраняет настройки авторизации в файле wa-config/auth.php
:
<?php return [ 'domain1.ru' => [ // разрешает авторизацию на сайте, в шаблонах темы дизайна за это отвечает функция $wa->isAuthEnabled() 'auth' => true, // приложение, которое отвечает за регистрацию/авторизацию, // приложение должно поддерживать авторизацию (в файле app.php должно быть указано 'auth' => true) 'app' => 'blog', // адаптеры авторизации через внешние сервисы 'adapters' => [ 'facebook' => [ 'app_id' => 'FACEBOOK_APP_ID', 'app_secret' => 'FACEBOOK_APP_SECRET', ], // ... другие адаптеры ], /* Массив, определяющий набор полей в форме регистрации. Если не задан явно, то используется следующий набор: 'fields' => [ 'firstname', 'lastname', '', // разделитель 'email', 'password', //ввод и подтверждение пароля ] */ ], 'domain2.ru' => [ // ... настройки для некоторого другого сайта domain2.ru ] ];
Набор полей в форме регистрации регулируется элементом массива 'fields'. Примеры обозначений полей:
- 'name': полное имя;
- 'sex': пол;
- 'birthday': дата рождения;
- 'phone.mobile': номер телефона с указанием обозначения 'mobile', 'work' и т. п.s;
- 'url': адрес сайта;
- 'address': композитное поле адреса, состоящее из отдельных элементарных полей: улица + дом + квартира, город, регион, страна, индекс;
- 'im.telegram': идентификатор в соцсети или в мессенджере, например, 'telegram', 'whatsapp', 'facebook' и т. п.
Информацию о других доступных полях можно найти в файле wa-system/contact/data/fields.php
.
Авторизация и регистрация посетителей сайта
Внешний вид и функциональность форм авторизации зависит от конкретного приложения, поэтому они подключаются на сайте не на системном уровне, а на уровне приложения. Фреймворк предоставляет готовые инструменты для удобного подключения этих форм внутри приложения, но подходящее место для их внедрения, их внешний вид и содержимое определяет исключительно разработчик приложения.
-
В файле
wa-apps/[app_id]/lib/config/app.php
нужно указать, что ваше приложение поддерживает авторизацию пользователей:'auth' => true,
У вашего приложения должен быть фронтенд:
'frontend' => true,
-
Необходимо реализовать 3 экшена, отвечающих за работу форм авторизации, регистрации и восстановления пароля, как описано далее.
Форма авторизации
Создайте файл wa-apps/[app_id]/lib/actions/[app_id]Login.action.php
по следующему образцу:
<?php class myappLoginAction extends waLoginAction { public function execute() { // общий макет страниц сайта $this->setLayout(new myappFrontendLayout()); // подключение шаблона формы авторизации $this->setThemeTemplate('login.html'); // вызов родительского класса, который содержит стандартную логику авторизации parent::execute(); } }
В теме дизайна создайте файл login.html
с кодом для отображения формы авторизации.
{$wa->loginForm()}
Форма регистрации
Создайте файл wa-apps/[app_id]/lib/actions/[app_id>]Signup.action.php
.
<?php class myappSignupAction extends waSignupAction { public function execute() { // основной макет страниц сайта $this->setLayout(new [APP_ID]FrontendLayout()); // подключение шаблона формы регистрации $this->setThemeTemplate('signup.html'); // выполнение родительского метода с общей логикой регистрации parent::execute(); } /** * Этот метод вызывается после успешного создания нового контакта. * В нём можно, например, отправить приветственное письмо новому пользователю * или добавить его контакт в категорию, соответствующую вашему приложению. */ protected function afterSignup(waContact $contact) { $contact->addToCategory($this->getAppId()); } }
Создайте в теме дизайна файл signup.html
с кодом для отображения формы регистрации.
{$wa->signupForm($errors)}
Форма восстановления пароля
Для реализации формы восстановления пароля, а также формы для ввода нового пароля, создайте файл wa-apps/[app_id]/lib/actions/[appp_id>]Forgotpassword.action.php
.
class myappForgotpasswordAction extends waForgotPasswordAction { public function execute() { // основной макет страниц сайта $this->setLayout(new myappFrontendLayout()); // подключение шаблона формы восстановления пароля $this->setThemeTemplate('forgotpassword.html'); // выполнение родительского метода с общей логикой восстановления пароля parent::execute(); } }
В теме дизайна создайте файл forgotpassword.html
с кодом для отображения формы восстановления пароля.
{if !empty($set_password)} {* Если в $set_password содержится true, показываем форму для ввода нового пароля *} {$wa->setPasswordForm()} {else} {* В противном случае показываем форму для ввода email-адреса *} {if !empty($sent)} <p>Инструкция по восстановлению пароля отправлена на ваш email-адрес.</p> <p><a href="{$wa->loginUrl()}">Я вспомнил пароль!</a></p> {else} {$wa->forgotPasswordForm()} {/if} {/if}
Внутренняя маршрутизация приложения
Описанные классы для реализации форм авторизации, регистрации и восстановления пароля нужно поселить во внутренней маршрутизации приложения, т. е. указать соответствующие адреса в файле wa-apps/[app_id>]/lib/config/routing.php
.
<?php return [ // форма авторизации 'login/' => 'login', // по адресу login/ сработает класс myappLoginAction // форма восстановления пароля 'forgotpassword/' => 'forgotpassword', // форма регистрации 'signup/' => 'signup', // ... остальные правила маршрутизации во фронтенде вашего приложения ... ];
Далее остаётся только поселить ваше приложение на один из ваших сайтов с помощью приложения «Сайт», включить для этого сайта авторизацию и выбрать для него в качестве приложения, реализующего авторизацию, ваше приложение.
Методы объекта $wa
Для удобной работы с функциями авторизации и регистрации в объекте $wa
в шаблонах Smarty доступны следующие методы:
-
isAuthEnabled
Возвращает статус настройки доступности функций авторизации на текущем сайте.
-
signupUrl
Возвращает URL страницы регистрации.
-
loginUrl
Возвращает URL страницы авторизации.
-
forgotPasswordUrl
Возвращает URL страницы восстановления пароля.
-
signupForm
Возвращает HTML-код формы регистрации.
-
loginForm
Возвращает HTML-код формы авторизации.
-
forgotPasswordForm
Возвращает HTML-код формы запроса данных для восстановления пароля.
-
setPasswordForm
Возвращает HTML-код формы ввода нового пароля в рамках процедуры восстановления.
-
authAdapters
Возвращает информацию о настроенных адаптерах авторизации через внешние сервисы.
isAuthEnabled()
Возвращает статус настройки доступности функций авторизации на текущем сайте.
Пример
{if $wa->isAuthEnabled()} <!-- Авторизация на этом сайте включена! --> {/if}
signupUrl ($absolute = false)
Возвращает URL страницы регистрации.
Параметры
- $absolute
Флаг, обозначающий необходимость вернуть абсолютный URL.
Пример
{$relative_signup_page_url = $wa->signupUrl()} {$absolute_signup_page_url = $wa->signupUrl(true)}
loginUrl ($absolute = false)
Возвращает URL страницы авторизации.
Параметры
- $absolute
Флаг, обозначающий необходимость вернуть абсолютный URL.
Пример
{$relative_login_page_url = $wa->loginUrl()} {$absolute_login_page_url = $wa->loginUrl(true)}
forgotPasswordUrl ($absolute = false)
Возвращает URL страницы восстановления пароля.
Параметры
- $absolute
Флаг, обозначающий необходимость вернуть абсолютный URL.
Пример
{$relative_password_recovery_page_url = $wa->forgotPasswordUrl()} {$absolute_password_recovery_page_url = $wa->forgotPasswordUrl(true)}
signupForm ($errors = [], $options = [])
Возвращает HTML-код формы регистрации.
Параметры
- $errors
Массив сообщений об ошибках, которые нужно показать в форме. В шаблоне Smarty этот массив доступен в виде переменной
$errors
. - $options
Массив параметров отображения и поведения формы со следующими ключами:
- show_title: Флаг, обозначающий необходимость отображения заголовка формы. Значение по умолчанию —
false
. - namespace: Строка для обозначения общего названия параметра запроса, через который можно получить значения всех полей формы при обработке их значений на сервере. По умолчанию значение не задано.
- show_oauth_adapters: Флаг, обозначающий необходимость отображения в форме кнопок входа через сторонние сервисы. Значение по умолчанию —
false
. - need_redirects: Флаг, обозначающий необходимость перенаправления пользователя после завершения регистрации на исходную страницу сайта, с которой он перешёл к регистрации. Значение по умолчанию —
true
. - need_placeholders: Флаг, обозначающий необходимость показывать значения атрибутов
placeholder
в текстовых полях формы. Значение по умолчанию —true
. - include_css: Флаг, обозначающий необходимость включить в состав HTML-кода формы стандартный блок CSS-кода. Значение по умолчанию —
true
. - contact_type: Обозначение типа контакта, данные которого нужно сохранить после регистрации:
- person: персона (значение по умолчанию);
- company: компания.
- show_title: Флаг, обозначающий необходимость отображения заголовка формы. Значение по умолчанию —
Пример
{$wa->signupForm([], [ 'show_title' => true, 'show_oauth_adapters' => true, 'namespace' => 'fields', 'need_redirects' => false, 'need_placeholders' => false, 'contact_type' => 'company' ])}
loginForm ($errors = [], $options = [])
Возвращает HTML-код формы авторизации.
Параметры
- $errors
Массив сообщений об ошибках, которые нужно показать в форме. В шаблоне Smarty этот массив доступен в виде переменной
$errors
. - $options
Массив параметров отображения и поведения формы со следующими ключами:
- title: Собственный текстовый заголовок, которым можно заменить стандартный заголовок формы.
- sub_title: Собственный текстовый подзаголовок, который можно показывать под основным заголовком формы.
- show_title: Флаг, обозначающий необходимость отображения заголовка формы. Значение по умолчанию —
false
. - show_sub_title: Флаг, обозначающий необходимость отображения подзаголовка формы. Значение по умолчанию —
false
. - namespace: Строка для обозначения общего названия параметра запроса, через который можно получить значения всех полей формы при обработке их значений на сервере. По умолчанию значение не задано.
- show_oauth_adapters: Флаг, обозначающий необходимость отображения в форме кнопок входа через сторонние сервисы. Значение по умолчанию —
false
. - need_redirects: Флаг, обозначающий необходимость перенаправления пользователя после завершения авторизации на исходную страницу сайта, с которой он перешёл к авторизации. Значение по умолчанию —
true
. - need_placeholders: Флаг, обозначающий необходимость показывать значения атрибутов
placeholder
в текстовых полях формы. Значение по умолчанию —true
. - include_css: Флаг, обозначающий необходимость включить в состав HTML-кода формы стандартный блок CSS-кода. Значение по умолчанию —
true
. - url: Собственный URL вместо стандартного, на который должны отправляться данные формы во время авторизации пользователя.
Пример
{$wa->loginForm([], [ 'show_title' => true, 'title' => 'My title', 'show_sub_title' => true, 'sub_title' => 'My subtitle', 'show_oauth_adapters' => true, 'namespace' => 'fields', 'need_redirects' => false, 'need_placeholders' => false, 'include_css' => false ])}
forgotPasswordForm ($errors = [], $options = [])
Возвращает HTML-код формы запроса данных для восстановления пароля.
Параметры
- $errors
Массив сообщений об ошибках, которые нужно показать в форме. В шаблоне Smarty этот массив доступен в виде переменной
$errors
. - $options
Массив параметров отображения и поведения формы со следующими ключами:
- title: Собственный текстовый заголовок, которым можно заменить стандартный заголовок формы.
- sub_title: Собственный текстовый подзаголовок, который можно показывать под основным заголовком формы.
- show_title: Флаг, обозначающий необходимость отображения заголовка формы. Значение по умолчанию —
false
. - show_sub_title: Флаг, обозначающий необходимость отображения подзаголовка формы. Значение по умолчанию —
false
. - namespace: Строка для обозначения общего названия параметра запроса, через который можно получить значения всех полей формы при обработке их значений на сервере. По умолчанию значение не задано.
- show_oauth_adapters: Флаг, обозначающий необходимость отображения в форме кнопок входа через сторонние сервисы. Значение по умолчанию —
false
. - need_redirects: Флаг, обозначающий необходимость перенаправления пользователя после завершения восстановления пароля на исходную страницу сайта, с которой он перешёл к восстановлению пароля. Значение по умолчанию —
true
. - need_placeholders: Флаг, обозначающий необходимость показывать значения атрибутов
placeholder
в текстовых полях формы. Значение по умолчанию —true
. - include_css: Флаг, обозначающий необходимость включить в состав HTML-кода формы стандартный блок CSS-кода. Значение по умолчанию —
true
.
Пример
{$wa->forgotPasswordForm([], [ 'show_title' => true, 'title' => 'My title', 'show_sub_title' => true, 'sub_title' => 'My subtitle', 'show_oauth_adapters' => true, 'namespace' => 'fields', 'need_redirects' => false, 'need_placeholders' => false, 'include_css' => false ])}
setPasswordForm ($errors = [], $options = [])
Возвращает HTML-код формы ввода нового пароля в рамках процедуры восстановления.
Параметры
- $errors
Массив сообщений об ошибках, которые нужно показать в форме. В шаблоне Smarty этот массив доступен в виде переменной
$errors
. - $options
Массив параметров отображения и поведения формы со следующими ключами:
- title: Собственный текстовый заголовок, которым можно заменить стандартный заголовок формы.
- sub_title: Собственный текстовый подзаголовок, который можно показывать под основным заголовком формы.
- show_title: Флаг, обозначающий необходимость отображения заголовка формы. Значение по умолчанию —
false
. - show_sub_title: Флаг, обозначающий необходимость отображения подзаголовка формы. Значение по умолчанию —
false
. - namespace: Строка для обозначения общего названия параметра запроса, через который можно получить значения всех полей формы при обработке их значений на сервере. По умолчанию значение не задано.
- show_oauth_adapters: Флаг, обозначающий необходимость отображения в форме кнопок входа через сторонние сервисы. Значение по умолчанию —
false
. - need_redirects: Флаг, обозначающий необходимость перенаправления пользователя после завершения восстановления пароля на исходную страницу сайта, с которой он перешёл к восстановлению пароля. Значение по умолчанию —
true
. - need_placeholders: Флаг, обозначающий необходимость показывать значения атрибутов
placeholder
в текстовых полях формы. Значение по умолчанию —true
. - include_css: Флаг, обозначающий необходимость включить в состав HTML-кода формы стандартный блок CSS-кода. Значение по умолчанию —
true
.
Пример
{$wa->setPasswordForm([], [ 'show_title' => true, 'title' => 'My title', 'show_sub_title' => true, 'sub_title' => 'My subtitle', 'show_oauth_adapters' => true, 'namespace' => 'fields', 'need_redirects' => false, 'need_placeholders' => false, 'include_css' => false ])}
authAdapters ($return_array = false, $options = [])
Возвращает информацию о настроенных адаптерах авторизации через внешние сервисы.
Параметры
- $return_array
Флаг, обозначающий необходимость вернуть массив с параметрами адаптеров авторизации. Если не указано
true
, то метод вернёт HTML-код кнопок авторизации для отображения на сайте. - $options
Массив параметров отображения и поведения форм авторизации через сторонние сервисы со следующими ключами:
- width: Ширина всплывающего окна в пикселях, которое должно открываться во время авторизации через любой из сервисов авторизации.
- height: Высота всплывающего окна в пикселях, которое должно открываться во время авторизации через любой из сервисов авторизации.
- [идентификатор сервиса авторизации]: Массив с ключами width и height, в значениях которого можно указать индивидуальную ширину и высоту всплывающего окна, которое должно открываться во время авторизации через указанный сервис. Для каждого сервиса авторизации можно добавить свой массив со значениями ширины и высоты, если должны отличаться от стандартных.
Пример
{* Показать кнопки авторизации через сторонние сервисы *} {$wa->authAdapters(false, [ 'width' => 700, 'height' => 600, 'google' => [ 'width' => 750, 'height' => 650 ] ])}
Авторизация через внешние сервисы (соцсети)
Фреймворк Webasyst предоставляет возможность настроить для посетителей сайта авторизацию через внешние сервисы (соцсети). Эта возможность реализована с помощью адаптеров авторизации. Показать кнопки для такого способа авторизации можно с помощью метода {$wa->authAdapters()}
или использования параметра с ключом 'show_oauth_adapters' при использовании методов для отображения форм, связанных с авторизацией.
Как проверить, авторизован ли пользователь
Содержимое страниц сайта можно сделать скрытым для всех посетителей и показывать его только зарегистрированным клиентам — с помощью проверки авторизации пользователя.
PHP
// в экшенах и контроллерах if ($this->getUser()->getId()) { // пользователь авторизован } // в других местах if (wa()->getUser()->getId()) { // пользователь авторизован }
Smarty
{if $wa->userId()} {* пользователь авторизован *} {/if}