Как правильно добавить пользователя после использования makerbundle make: auth - PullRequest
0 голосов
/ 31 января 2019

Я настраиваю аутентификацию при входе в систему для приложения Symfony 4, используя функцию MakerBundle 1.8, указанную ниже:

php bin/console make:auth

Эта функция описана в этой статье: https://symfony.com/blog/new-in-makerbundle-1-8-instant-user-login-form-commands

Я могу просмотреть форму и попытаться войти в систему, но не могу понять, как правильно добавлять пользователей с паролями и ролями.

Я пытался просто создать пользователя через базу данных, используя строкувот так для поля ролей:

{"path":"^/admin","roles":"ROLE_ADMIN"}

(я обнаружил, что JSON в "access_control" на security.yml)

Но когда я пытаюсь войти в систему как этот пользователь, я получаю сообщениеговоря "Недействительные учетные данные."Я подозреваю, что это связано с тем, что для обеспечения безопасности используется шифрование, а пользователь, которого я добавил в базу данных, представлен в виде обычного текста.

Пожалуйста, дайте мне знать, если у вас есть предложения о том, как добавить пользователя для проверки безопасности, котораядобавлено с помощью функции make: auth для MakerBundle.

ОБНОВЛЕНИЕ: Спасибо Уильяму за ответ!Вот модифицированная версия предоставленного вами приспособления, которая позволила мне войти в систему.

<?php
namespace App\DataFixtures;

use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManage;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use App\Entity\User;
use Doctrine\Common\Persistence\ObjectManager;

class UserFixtures extends Fixture 
{

    public function __construct(UserPasswordEncoderInterface $encoder)
    {
        $this->encoder = $encoder;
    }

    public function load(ObjectManager $manager)
    {

            $user = new User();
            $user->setEmail("myemail@somedomain.io");

            $roles = array("path" => "^/admin", "roles" => "ROLE_ADMIN");

            $user->setRoles($roles);

            $password = $this->encoder->encodePassword($user, 'pass_1234');
            $user->setPassword($password);

            $manager->persist($user);

        $manager->flush();
    }

}
?>

1 Ответ

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

Одним из решений будет использование светильников.Согласно документации: DoctrineFixturesBundle , я думаю, вы могли бы создать класс пользовательских приспособлений, например:

<?php
namespace App\DataFixtures;

use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManage;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use App\Entity\User;

class UserFixtures extends Fixture 
{

    public function __construct(UserPasswordEncoderInterface $encoder)
    {
        $this->encoder = $encoder;
    }

    public function load(ObjectManager $manager)
    {
        $numberOfUsers = 10; 
        for($i = 0; $i < $numberOfUsers; $i++) {
             $user = new User();
             $user->setUsername(sprintf('test%d', $i));
             $user->addRole('ROLE_ADMIN'); 
             $password = $this->encoder->encodePassword($user, 'pass_1234');
             $user->setPassword($password);

             $manager->persist($user);
        }

        $manager->flush();
    }

}
?>

Наконец, вы выполните команду:

php bin/console doctrine:fixtures:load
...