Squeak.ru - шаблоны программирования

Как правильно добавить пользователя после использования makerbundle make:auth

Я настраиваю аутентификацию при входе в приложение 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("[email protected]");

            $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

одним из решений было бы использование светильников. Согласно документации: 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
31.01.2019
  • Спасибо Вильям за ответ! Когда я пытаюсь запустить команду, я получаю эту ошибку: В строке UserFixtures.php 33: Ошибка компиляции: объявление App\DataFixtures\UserFixtures::load(App\DataFixtures\ObjectManager $manager) должно быть совместимо с Doctrine\ Common\Dat aFixtures\FixtureInterface::load(Doctrine\Common\Persistence\ObjectManager $manager) 01.02.2019
  • Я подозреваю, что это связано с тем, что пространство имен в предоставленном вами PHP, которое я назвал UserFixtures.php, совпадает с пространством имен в AppFixtures.php, которое создается по умолчанию при установке пакета. Любые мысли о том, как решить эту проблему? 01.02.2019
  • Я понял, что мне просто нужно добавить use Doctrine\Common\Persistence\ObjectManager; на вершину класса! Однако, когда я запускаю его, он предупреждает меня, что Осторожно, база данных roi_report будет очищена. Вы хотите продолжить? что звучит довольно страшно! Я изучаю это сейчас. Любые предложения приветствуются! 01.02.2019
  • Вот почему мы обычно используем фикстуры в режиме разработки. + Таким образом, вы можете сохранить текущую БД перед выполнением этой команды + или вы можете использовать параметр --append, который позволит избежать очистки базы данных. ``` Доктрина php bin/console:fixtures:load --append ``` 01.02.2019
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...