想要添加重复的密码字段,以便用户可以更改密码,而无需使用FOSUserBundle

时间:2019-04-01 14:35:46

标签: php symfony doctrine-orm sonata-admin

我想在this related question中提出评论,但没有必要的代表。

我将Sonfony 4(flex)与Sonata Admin捆绑包一起使用,我想为用户创建一个“管理员”,这将允许通过Sonata后端管理应用程序用户。麻烦在于密码字段。

我知道我可以使用Sonata用户捆绑包,也可以安装FOSUserBundle并按照链接的问题中的建议使它正常工作,但是没有人有任何经验,或者建议如何在不安装FOS捆绑包的情况下使它起作用吗?

我尝试按照链接的问题中的步骤进行操作,但是由于缺少“ plainPassword”字段且缺少关联的getter和setter而遇到错误, 鉴于这些字段在我的(非FOS)用户实体上不存在,因此是有道理的,因此我将字段类型更改为password(请参见下文),但是现在,很明显,密码以明文形式保存在数据库中。

// 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捆绑包进行配置。

我发现this page,重复信息here,其中包含有关如何使用更基本的用户实体且没有FOS捆绑包的登录身份验证的详细说明, 我已经设法使它起作用,但是该指南没有提供有关如何创建在此配置下可以使用的UserAdmin或如何在管理模板中放置注销按钮/ useraccount菜单的建议

现在我还剩下 2个障碍

  1. 在保留之前需要密码字段进行加密(将进行SO搜索以寻求帮助),并接受形式为空(表示“请勿更改”)的空密码,当前生成“期望的字符串,提供的值为null”错误
  2. 需要弄清楚如何覆盖和包括 symfony flex目录结构中的user_block.html.twig模板。 (找到了this question,但唯一的答案是假设年龄较大 目录结构,我有点困惑如何指定我在templates/SonataOverrides/user_block.html.twig
  3. 创建的替代路径
    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:

不起作用。有什么建议吗?

0 个答案:

没有答案