Хотите добавить повторяющиеся поля пароля, чтобы пользователи могли изменить свой пароль, это возможно БЕЗ использования FOSUserBundle - PullRequest
0 голосов
/ 01 апреля 2019

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

Я использую Symfony 4 (flex) с комплектом администрирования sonata, и яхотел бы создать «администратора» для пользователей, который позволит управлять пользователями приложений через серверную часть сонаты.Проблема здесь в поле пароля.

Я знаю, что могу использовать комплект пользователей Sonata или установить FOSUserBundle и заставить его работать, следуя советам в связанном вопросе, но есть ли у кого-нибудь опыт работы с илисоветы, как сделать эту работу без установки FOS Bundle?

Я попытался выполнить действия, описанные в связанном вопросе, но сталкиваюсь с ошибками, касающимися отсутствующего поля 'plainPassword' и отсутствия связанных методов получения и установки,Имеет смысл, учитывая, что эти поля не существуют на моем (не FOS) пользовательском объекте, поэтому я изменил тип поля на пароль (см. ниже), но теперь, очевидно, пароль сохраняется в БД в виде открытого текста ...

// src/Admin/UserAdmin.php
    protected function configureFormFields(FormMapper $formMapper)
    {
        $pass_required = false;
        if (!$this->subject->getId()) {
            $pass_required = true;
        }
        $formMapper->add('email')
                   ->add('firstName')
                   ->add('lastName')
                   ->add('password', RepeatedType::class, [
                       'data' => null,
                       'type' => PasswordType::class,
                       'first_options' => ['label' => 'Password'],
                       'second_options' => ['label' => 'Confirm Password'],
                       'invalid_message' => 'Passwords don\'t match',
                       'required' => $pass_required,
                   ]);
    }

В конечном итоге, если мне абсолютно необходимо пойти по пути установки FOS User Bundle, то это то, что мне нужно будет сделать, но я хотел бы услышать любые идеи, как мне избежать этой дополнительной зависимости,поскольку многие функции FOSUserBundle для этого проекта излишни.

ОБНОВЛЕНИЕ: Я пошел по пути установки FOSUserBundle и смог подключить его к sonata admin, поскольку это позволило мне использовать поле plainPassword в определении формы, и все работает как положено.

Однако без установки пакета пользователей Sonata, я не получаю удобные кнопки выхода из системы, добавленные в шаблон администратора.Я был бы согласен с добавлением пакета Sonata User в мой проект, за исключением того, что, как видно из большей части недавней документации, которую я обнаружил, защитники Symfony являются подходящим способом, и это, кажется, не совместимо (или, по крайней мере, труднонастроить) с пакетом FOSUser, к сожалению.

Я нашел эту страницу , повторяющуюся информацию здесь , с подробными инструкциями о том, как настроить аутентификацию при входе в систему с использованием более простого пользователяEntity и без пакетов FOS, мне удалось заставить это работать, но это руководство не дает советов о том, как создать UserAdmin, который будет работать в этой конфигурации, или как разместить меню кнопки выхода из системы / useraccount в шаблоне администратора

Теперь у меня есть 2 оставшихся препятствия :

  1. Мне нужно поле пароля, чтобы зашифровать перед сохранением (буду делать SO поиск для помощи с этим), и принять пустой пароль вформа (что означает «не изменять»), в настоящий момент генерирует «ожидаемую строку, указана нулевая строка»
  2. необходимо выяснить, как переопределить и включить шаблон user_block.html.twig в структуру каталогов symfony flex.(найдено этот вопрос , но единственный ответ там предполагает более старую структуру каталогов, и я немного запутался, как указать путь к переопределению, которое я создал в templates/SonataOverrides/user_block.html.twig
    templates:
        user_block: App:templates:SonataOverrides:user_block.html.twig

с

sonata_block:
    blocks:
        # enable the SonataAdminBundle block
        sonata.admin.block.admin_list:
            contexts: [admin]
        sonata.user.block.menu:
        sonata.user.block.account:

не работает. Любой совет ??

...