Як налаштувати відповіді аутентифікатора форми входу

Дата оновлення перекладу 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>