Pull to refresh

Comments 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 или какой-нибудь туториал в интернете, где будет пошаговое описание как сделать две разные формы логина для двух разных сущностей, которые не связаны между собой?
UFO just landed and posted this here
UFO just landed and posted this here
В своё время делал аналогичное решение с двумя сущностями, но после отказался, отделив код админки от кода сайта с вынесением последней на поддомен.

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


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


    form_login:
        login_path: login
        check_path: login

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


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



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

Sign up to leave a comment.

Articles