Как настроить ответы аутентификатора формы входа

Дата обновления перевода 2022-02-03

Как настроить ответы аутентификатора формы входа

Аутентификатор формы входа создает форму входа, где пользователи проходят аутентификацию, используя идентификатор (например, адрес почты или имя пользователя) и пароль. В Безопасность объясняется применение такого аутентификатора.

Эта статья описывает, как настроить ответы (успеха или неудачи) этого аутентификатора.

Перенаправление после успеха

По умолчанию, форма будет перенаправлять на 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:

  • YAML
  • XML
  • PHP
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, и всегда перенаправлять на страницу по умолчанию:

  • YAML
  • XML
  • PHP
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, чтобы включить это поведение:

  • YAML
  • XML
  • PHP
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:

  • YAML
  • XML
  • PHP
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 файерволла, который определяет форму входа.

  • YAML
  • XML
  • PHP
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>