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

Дата обновления перевода 2023-01-11

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

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

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

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

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

  • 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>