Як налаштувати відповіді аутентифікатора форми входу
Дата оновлення перекладу 2023-09-26
Як налаштувати відповіді аутентифікатора форми входу
Аутентифікатор форми входу створює форму входу, де користувачі проходять аутентифікацію, використовуючи ідентифікатор (наприклад, адресу пошти або імʼя користувача) та пароль. В пояснюється застосування такого аутентифікатора.
Перенаправлення після успіху
За замовчуванням, форма перенаправлятиме за URL, запитаним користувачем (тобто, URL,
який викликав відображення форми входу). Наприклад, якщо користувач запитав
http://www.example.com/admin/post/18/edit
, то після успішного входу в систему, він
буде зрештою направлений назад на http://www.example.com/admin/post/18/edit
.
Це робиться шляхом збереження запитуваного URL в сесії. Якщо в сесії немає URL (можливо,
користувач одразу зайшов на сторінку входу в систему), тоді користувач буде перенаправлений
на сторінку за замовчуванням - за замовчуванням /
(тобто, домашню сторінку). Ви можете
змінити цю поведінку декількома шляхами.
Зміна сторінки за замовчуванням
Визначіть опцію default_target_path
, щоб змінити сторінку, куди буде перенаправлено
користувача, якщо в сесії не була збережена попередня сторінка. Значення може бути абсолютним
/відносним URL або іменем маршруту Symfony:
1 2 3 4 5 6 7 8 9
# config/packages/security.yaml
security:
# ...
firewalls:
main:
form_login:
# ...
default_target_path: after_login_route_name
Завжди перенаправляти на сторінку за замовчуванням
Визначіть булеву опцію always_use_default_target_path
, щоб ігнорувати раніше
запитаний URL і завжди перенаправляти на сторінку за замовчуванням:
1 2 3 4 5 6 7 8 9
# config/packages/security.yaml
security:
# ...
firewalls:
main:
form_login:
# ...
always_use_default_target_path: true
Контроль перенаправлення з використанням параметрів запиту
URL для перенаправлення після входу у систему може бути визначений з використанням параметра
_target_path
запитів GET і POST. Його значення повинно бути відносним або абсолютним URL,
а не іменем маршруту Symfony.
Визначення URL перенаправлення через GET, використовуючи параметр рядку запиту:
1
http://example.com/some/path?_target_path=/dashboard
Визначення URL перенаправлення через POST, використовуючи приховане поле форми:
1 2 3 4 5 6 7
{# templates/security/login.html.twig #}
<form action="{{ path('login') }}" method="post">
{# ... #}
<input type="hidden" name="_target_path" value="{{ path('account') }}"/>
<input type="submit" name="login"/>
</form>
Використання URL-реферера
У випадку, якщо попередній URL не зберігався у сесії, а в запиті не додано параметр
_target_path
, ви можете використати замість цього значення заголовку HTTP_REFERER
,
так як це часто буде одним і тим же. Визначіть булеву опцію use_referer
, щоб включити
цю поведінку:
1 2 3 4 5 6 7 8 9 10
# config/packages/security.yaml
security:
# ...
firewalls:
main:
# ...
form_login:
# ...
use_referer: true
Note
URL-реферер використовується лише коли він відрізняється від URL, згенерованого
маршрутом login_path
. щоб уникнути петлі перенаправлень.
Перенаправлення після невдачі
Після невдалого входу у систему (наприклад, було відправлено неправильний пароль або
імʼя користувача), користувач перенаправляється назад до самої форми входу. Використайте
опцію failure_path
, щоб визначити нову ціль через абсолютний/відносний URL або імʼя
маршруту Symfony:
1 2 3 4 5 6 7 8 9 10
# config/packages/security.yaml
security:
# ...
firewalls:
main:
# ...
form_login:
# ...
failure_path: login_failure_route_name
Ця опція також може бути встановлена через параметр запиту _failure_path
:
1
http://example.com/some/path?_failure_path=/forgot-password
1 2 3 4 5 6 7
{# templates/security/login.html.twig #}
<form action="{{ path('login') }}" method="post">
{# ... #}
<input type="hidden" name="_failure_path" value="{{ path('forgot_password') }}"/>
<input type="submit" name="login"/>
</form>
Налаштування параметрів цілі невдалого запиту
Імʼя атрибутів запитів, використовуване для визначення успішних та невдалих перенаправлень
входу у систему, може бути налаштоване, використовуючи опції target_path_parameter
і
failure_path_parameter
брандмауера, який визначає форму входу.
1 2 3 4 5 6 7 8 9 10
# config/packages/security.yaml
security:
# ...
firewalls:
main:
# ...
form_login:
target_path_parameter: go_to
failure_path_parameter: back_to
Використовуючи конфігурацію вище, ви отримаєте повністю налаштовувані приховані поля форми та параметри рядку запиту:
1
http://example.com/some/path?go_to=/dashboard&back_to=/forgot-password
1 2 3 4 5 6 7 8
{# templates/security/login.html.twig #}
<form action="{{ path('login') }}" method="post">
{# ... #}
<input type="hidden" name="go_to" value="{{ path('dashboard') }}"/>
<input type="hidden" name="back_to" value="{{ path('forgot_password') }}"/>
<input type="submit" name="login"/>
</form>