使用带有Symfony 3.4的FOSUserBundle + EasyAdminBundle时,用户密码未加密

时间:2018-06-04 10:26:13

标签: symfony fosuserbundle password-encryption easyadmin

我将 Symfony 3.4 FOSUserBundle EasyAdminBundle 一起使用。

我在以下问题上遇到了一段时间:当我通过EasyAdmin创建新用户时,输入的密码没有经过哈希处理,在数据库和创建用户的编辑表单中保持清晰(在EasyAdmin中) ),当我通过FOSUserBundle(注册)生成的表单创建用户时没有问题。

我的用户实体

<?php
// src/Repas/UserBundle/Entity/User.php

namespace Repas\UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
}

我的 AdminController.php 文件:

<?php
namespace Repas\MenusBundle\Controller;

use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;

class AdminController extends BaseAdminController
{
    public function createNewUserEntity()
    {
        return $this->get('fos_user.user_manager')->createUser();
    }

    public function persistUserEntity($user)
    {
        $this->get('fos_user.user_manager')->updateUser($user, false);
        parent::persistEntity($user);
    }

    public function updateUserEntity($user)
    {
        $this->get('fos_user.user_manager')->updateUser($user, false);
        parent::updateEntity($user);
    }
}

在我的 config.yml 文件中:

easy_admin:
    entities:
        User:
            class: Repas\UserBundle\Entity\User
            export_path: '%kernel.root_dir/../var/export/user'
            password_encoding: { algorithm: 'bcrypt', cost: 12 }

在我的 security.yml 文件中:

encoders:
        Repas\UserBundle\Entity\User: bcrypt

在我的 routing.yml 文件中:

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"
easy_admin_bundle:
    resource: "@RepasMenusBundle/Controller/AdminController.php"
    type:     annotation
    prefix:   /admin

我经历过很多论坛以及官方文档,我认为我已经正确地遵循了一切,但我当然错过了一些东西。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

EasyAdminBundle没有定义加密密码的选项,它只提供保存实体的选项(一个crud),您可以根据覆盖的{{3}内的路由或操作按defining custom actions进行扩展。 }。

  

实施例

easy_admin:
    entities:
        User:
            list:
                actions:
                    - { name: 'create_user', type: 'route' } //or nothing on type to use the action option

此时,您已经有路由可访问的已定义控制器或处理指定用户操作的覆盖控制器。您只需要使用FOSUser方法正确加密密码,如AdminController in order to integrate with FOSUserBundle中所述。

希望它有所帮助!

答案 1 :(得分:0)

好吧,我想我的错误是,在Easyadmin生成的用于创建新用户的表单中,Easyadmin生成一个名为“password”的字段,而不是“plainPassword”,这是FOSUser用于加密输入密码的字段。所以我想我只需要在我的“Easyadmin新用户”表单中创建一个新的“plainPassword”字段,并在该字段中输入用户密码进行加密。然后加密的密码将存储在数据库的“密码”字段中。

我会告诉你这是否是解决方案。