Symfony 4 EasyAdmin如何加密密码?

Symfony 4 EasyAdmin如何加密密码?,symfony,easyadmin,symfony-4.2,Symfony,Easyadmin,Symfony 4.2,我正在使用EasyAdmin添加/编辑用户,想知道是否有可能加密您的密码? 密码加密以前在我使用Symfony 4 make:注册表时起作用,但我现在不能使用,我必须使用EasyAdmin easy_admin.yaml easy_admin: entities: User: class: App\Entity\User password_encoding: { algorithm: 'bcrypt', cost: 12 } (实际)我进入EasyAdmin页面

我正在使用EasyAdmin添加/编辑用户,想知道是否有可能加密您的密码? 密码加密以前在我使用Symfony 4 make:注册表时起作用,但我现在不能使用,我必须使用EasyAdmin

easy_admin.yaml

easy_admin:
  entities:
    User:
     class: App\Entity\User
     password_encoding: { algorithm: 'bcrypt', cost: 12 }
(实际)我进入EasyAdmin页面(/admin),单击用户,添加用户,填写电子邮件(test@gmail.com)和密码(测试),单击保存更改

现在,用户存储在数据库中,但使用明文密码。


(预期)除密码外,上述所有内容均已加密。

扩展EasyAdmin控制器并处理用户实体。大概是这样的:

namespace AppBundle\Controller\Admin;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
use AppBundle\Entity\User;

class AdminController extends BaseAdminController
{
    protected function prePersistUserEntity(User $user)
    {
        $encodedPassword = $this->encodePassword($user, $user->getPassword());
        $user->setPassword($encodedPassword);
    }

    protected function preUpdateUserEntity(User $user)
    {
        if (!$user->getPlainPassword()) {
            return;
        }
        $encodedPassword = $this->encodePassword($user, $user->getPlainPassword());
        $user->setPassword($encodedPassword);
    }

    private function encodePassword($user, $password)
    {
        $passwordEncoderFactory = $this->get('security.encoder_factory');
        $encoder = $passwordEncoderFactory->getEncoder($user);
        return $encoder->encodePassword($password, $user->getSalt());
    }

}


与Symfony 5兼容的新版本:

我的工作项目中基于symfony5和php7.4的代码
  • 扩展EasyAdminController
  • plainPassword
    虚拟“财产添加到您的
    用户
    实体:
  • 更新
    easy\u admin.yaml

  • 它与Easy Admin无关。你必须自己在
    包/security中配置安全性。yaml
    我在security中写了这个。yaml security:encoders:App\Entity\User:algorithm:argon2你能展开你的问题吗?你的意思是当你通过EasyAdmin创建/编辑用户时,它不会加密密码吗?是的,这就是我的意思,也许在这里你可以找到答案:。您应该覆盖UserController并手动添加密码编码/解码。
    <?php
    
    declare(strict_types=1);
    
    namespace App\Controller;
    
    use App\Entity\User;
    use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;
    use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
    
    /**
     * Class AdminController.
     *
     * @author Dmitriy Atamaniuc <d.atamaniuc@gmail.com>
     */
    final class AdminController extends EasyAdminController
    {
        private UserPasswordEncoderInterface $encoder;
    
        private function setUserPlainPassword(User $user): void
        {
            if ($user->getPlainPassword()) {
                $user->setPassword($this->encoder->encodePassword($user, $user->getPlainPassword()));
            }
        }
    
        /**
         * @required
         */
        public function setEncoder(UserPasswordEncoderInterface $encoder): void
        {
            $this->encoder = $encoder;
        }
    
        public function persistUserEntity(User $user): void
        {
            $this->setUserPlainPassword($user);
    
            $this->persistEntity($user);
        }
    
        public function updateUserEntity(User $user): void
        {
            $this->setUserPlainPassword($user);
    
            $this->updateEntity($user);
        }
    }
    
    easy_admin_bundle:
        resource: 'App\Controller\AdminController'
        prefix: /admin
        type: annotation
    
    /**
    * @Assert\NotBlank()
    * @Assert\Length(min=5, max=128)
    */
    private ?string $plainPassword = null;
    
    public function getPlainPassword(): ?string
    {
        return $this->plainPassword;
    }
    
    public function setPlainPassword(string $password): void
    {
        $this->plainPassword = $password;
    }
    
    easy_admin:
        entities:
            User:
                class: App\Entity\User
                label: label.user
                new:
                    title:  field.user.add_new
                    fields:
                        # some fields like username here
                        - { property: username, label: field.user.username }
                        - { property: fullname, label: field.user.fullname, type: 'text' }
                        # plain password 
                        - { property: plainPassword, label: field.user.password, type: 'password' }