Пароль пользователя не шифруется при использовании FOSUserBundle + EasyAdminBundle с Symfony 3.4 - PullRequest
0 голосов
/ 04 июня 2018

Я использую 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 file:

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

Я прошел через многие форумы, а также официальные документы, думаю, что я все правильно выполнил, но наверняка что-то пропустил.

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Хорошо, я предполагаю, что моя ошибка в том, что в форме, сгенерированной Easyadmin для создания нового пользователя, Easyadmin генерирует поле с именем «пароль» вместо «plainPassword», которое FOSUser использует для шифрования введенного пароля.Поэтому я думаю, что мне просто нужно создать новое поле "plainPassword" в моей форме "Easyadmin new user" и ввести пароль пользователя в этом поле для его шифрования.Затем зашифрованный пароль будет сохранен в поле «пароль» базы данных.

Я скажу вам, если это решение.

0 голосов
/ 04 июня 2018

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 для правильного шифрования пароля, как описано в этом документе .

Надеюсь, это поможет!

...