1

我将Symfony 3.4FOSUserBundleEasyAdminBundle一起使用。

我在以下问题上停留了一段时间:当我通过 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

我经历了许多论坛以及官方文档,我认为我正确地遵循了所有内容,但我确实错过了一些东西。

谢谢您的帮助。

4

2 回答 2

0

EasyAdminBundle 没有定义加密密码的选项,它只提供保存实体(一个 crud)的选项,您可以通过定义基于覆盖 AdminController 内的路由或操作的自定义操作来扩展这些实体,以便与 FOSUserBundle 集成

例子

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

此时,您已经有一个可通过路由访问的已定义控制器或一个处理指定用户操作的覆盖控制器。您只需要使用 FOSUser 方法正确加密密码,如本文档中所述。

希望能帮助到你!

于 2018-06-04T12:30:31.263 回答
0

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

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

于 2018-06-04T13:34:53.447 回答