Как настроить ответы аутентификатора формы входа
Дата обновления перевода 2023-09-3260
Как настроить ответы аутентификатора формы входа
Аутентификатор формы входа создает форму входа, где пользователи проходят аутентификацию, используя идентификатор (например, адрес почты или имя пользователя) и пароль. В объясняется применение такого аутентификатора.
Перенаправление после успеха
По умолчанию, форма будет перенаправлять на 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.
Для GET, используйте параметр строки запроса:
1
http://example.com/some/path?_target_path=/dashboard
Для 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>