为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony 4 EasyAdminBundle:纯密码的编码和保存问题

Symfony 4 EasyAdminBundle:纯密码的编码和保存问题

PHP
慕妹3242003 2022-10-22 16:21:38
这些是我使用 Symfony 的第一步。我尝试在 Symfony 4.4 中使用 Easyadmin Bundle 实现简单的用户管理。我按照 symfony.com 上的教程进行操作,其中大部分工作正常(注册表单、后端登录、后端安全性、数据库中用户的后端列表)。我的问题是在 Easyadmin 后端创建和更新用户。当我尝试创建新用户时,我看到了正确的字段,我确实输入了一些数据,如果我单击“保存更改”,则会引发以下错误:An exception occurred while executing 'INSERT INTO app_users (username, email, roles, password, is_active) VALUES (?, ?, ?, ?, ?)' with params ["testname", "test@example.com", "a:1:{i:0;s:9:\"ROLE_USER\";}", null, 1]: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'password' cannot be null列“密码”不能为空很清楚:我需要为它提供一些编码的密码字符串。我认为我输入的纯密码字段中的数据没有被我的用户实体中的 setPassword() 方法编码和/或处理。据我了解一些 SO 答案和 Symfony 文档,它应该自动工作!?我不知道。我试图创建一个扩展 EasyAdminController 的 AdminController 并将其挂接到用户实体持久化的某个地方,但我无法让它工作。(像这样:https ://stackoverflow.com/a/54749433 )如何处理/编码保存到数据库中密码字段的纯密码?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我现在可以回答我自己的问题:


解决方案:我只是忘记在 Easyadmin 路由中引用控制器:


# config/routes/easy_admin.yaml

easy_admin_bundle:

    resource: 'App\Controller\AdminController'

    prefix: /admin

    type: annotation

这是针对有相同问题的每个人的完整控制器:


// src/Controller/AdminController.php

namespace App\Controller;


use App\Entity\User;

use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;


class AdminController extends EasyAdminController

{

    private $passwordEncoder;


    public function __construct(UserPasswordEncoderInterface $passwordEncoder)

    {

        $this->passwordEncoder = $passwordEncoder;

    }


    private function encodeUserPlainPassword($user)

    {

        $plainPassword = $user->getPlainPassword();


        if (!empty($plainPassword)) {

            $encoded = $this->passwordEncoder->encodePassword($user, $plainPassword);

            $user->setPassword($encoded);

        }

    }


    public function persistEntity($user)

    {

        $this->encodeUserPlainPassword($user);

        parent::persistEntity($user);

    }


    public function updateEntity($user)

    {

        $this->encodeUserPlainPassword($user);

        parent::updateEntity($user);

    }

}


查看完整回答
反对 回复 2022-10-22
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信