Авторизация во фронтенде
Фреймворк 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}
В качестве примера, в котором реализована описанная ниже система авторизации пользователей во фронтенде, рекомендуем
посмотреть приложение «








