Symfony 4 EasyAdmin как зашифровать пароли? - PullRequest
0 голосов
/ 18 февраля 2019

Я использую EasyAdmin для добавления / редактирования пользователей и хотел спросить, есть ли возможность шифрования ваших паролей?Шифрование паролей работало ранее, когда я использовал Symfony 4 make: регистрационную форму, но я не могу использовать ее сейчас, мне нужно использовать EasyAdmin.

easy_admin.yaml

easy_admin:
  entities:
    User:
     class: App\Entity\User
     password_encoding: { algorithm: 'bcrypt', cost: 12 }

(Actual) Я перехожу на страницу EasyAdmin (/ admin), нажимаю «Пользователь», «Добавить пользователя», введите адрес электронной почты (test@gmail.com) и пароль (test), нажимаю «Сохранить изменения».

Теперь пользователь сохраняется вбаза данных, но с открытым текстом.enter image description here

(ожидается) Все вышеперечисленное, но пароль зашифрован.

1 Ответ

0 голосов
/ 18 февраля 2019

Расширение контроллера 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());
    }

}

...