Как стать автором
Обновить

Комментарии 12

Написать туториал решил после того, как не нашел подробной инструкции для данной задачи в английской документации, гайдах или обсуждениях, не говоря уже о материалах на русском языке.

Для решения таких задач нужны инструкции, пошаговые туториалы и надо гуглить? Просто сделать 2 формы авторизации?
В стандартной документации Symfony расписан процесс создания формы авторизации для одной сущности, например, User.
Даже если мы сделаем вторую форму авторизации (т.е. другой route, а соответственно контроллер) — это не даст нам возможность использовать другую сущность.

Всё это настраивается в security.yaml — о чем документация подробно не рассказывает

Яркий пример — даже после настройки security.yaml как нужно, возникла проблема — в качестве логина передавался username, а мне необходимо было передавать email. Это решается параметром username_parameter — о чем нигде толком не написано ясно.

            form_login:
                login_path: /admin/login
                check_path: /admin/login_check
                default_target_path: /admin
                username_parameter: email
                password_parameter: password
                use_referer: true


Яркий пример

Вообще-то изменение username_parameter на email, это один из топовых вопросов в части авторизации.
Если Вам лень гуглить, есть еще такая хорошая команда config:dump-reference, например
./bin/console config:dump-reference security firewalls.name.form_login выводит кучу возможных параметров, список которых сразу должно наводить на определенные мысли человека, пытающегося юзать symfony, мягко скажем так…
Например
form_login:
    provider:             ~
    remember_me:          true
    success_handler:      ~
    failure_handler:      ~
    check_path:           /login_check
    use_forward:          false
    require_previous_session: false
    login_path:           /login
    username_parameter:   _username
    password_parameter:   _password
    csrf_parameter:       _csrf_token
    csrf_token_id:        authenticate
    enable_csrf:          false
    post_only:            true
    always_use_default_target_path: false
    default_target_path:  /
    target_path_parameter: _target_path
    use_referer:          false
    failure_path:         null
    failure_forward:      false
    failure_path_parameter: _failure_path
    csrf_token_generator: ~

Я ниже ответил подробно. Как раз из-за того, что вы смешали два способа реализации формы: форма сгенерированна под аутентификатор, а в итоге используется form_login, вам пришлось искать эти параметры.

Документация (https://symfony.com/doc/current/security/form_login_setup.html) описывает процесс создания формы логина для одной сущности, в данном случае User.

Можете дать ссылку на официальную документацию от Symfony или какой-нибудь туториал в интернете, где будет пошаговое описание как сделать две разные формы логина для двух разных сущностей, которые не связаны между собой?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
В своё время делал аналогичное решение с двумя сущностями, но после отказался, отделив код админки от кода сайта с вынесением последней на поддомен.

В Symfony есть несколько способов реализовать форму входа:


  1. Изначальный form_login. По сути требует от себя только небольшого конфига


    form_login:
        login_path: login
        check_path: login

    и собственно самой формы. К сожалению, шаг влево, шаг вправо — она уже не подойдет (хотя мне всегда хватало)


  2. Аутентификация на базе symfony/security-guard. В этом случае у пользователя есть полный контроль над процессом, но требует от себя больше действий, а именно реализации интерфейса AuthenticatorInterface. Как раз этот способ предлагается в документации, т.к. используется MakerBundle и весь бойлерплейт можно переложить на кодогенерацию.



В вашем гайде используются оба подхода. Вы описываете создание аутентификаторов, но потом ни с того, ни с сего добавляете ключ form_login в конфиг фаерволов. В итоге от команды make:auth вы берете только форму логина, а сгенерированные аутентификаторы лежат мертвым грузом.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации