使用 makerbundle 后如何正确添加用户 make:auth
How to properly add a user after using makerbundle make:auth
我正在使用下面列出的 MakerBundle 1.8 功能为 Symfony 4 应用程序设置登录身份验证:
php bin/console make:auth
这篇文章描述了这个功能:https://symfony.com/blog/new-in-makerbundle-1-8-instant-user-login-form-commands
我可以查看表单并尝试登录,但我不知道如何正确添加具有密码和角色的用户。
我试过通过数据库创建用户,在角色字段中使用这样的字符串:
{"path":"^/admin","roles":"ROLE_ADMIN"}
(我在 security.yml 上的 "access_control" 下发现了 JSON)
但是当我尝试以该用户身份登录时,我收到一条消息说 "Invalid credentials." 我怀疑这是因为安全性正在使用加密并且我添加到数据库中的用户是纯文本。
如果您对我如何添加用户以测试 MakerBundle 的 make:auth 功能添加的安全性有任何建议,请告诉我。
更新:感谢威廉的回答!这是您提供的允许我登录的固定装置的修改版本。
<?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();
}
}
?>
解决方案之一是使用固定装置。根据文档:DoctrineFixturesBundle,我想你可以做一个用户夹具 class,比如:
<?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
我正在使用下面列出的 MakerBundle 1.8 功能为 Symfony 4 应用程序设置登录身份验证:
php bin/console make:auth
这篇文章描述了这个功能:https://symfony.com/blog/new-in-makerbundle-1-8-instant-user-login-form-commands
我可以查看表单并尝试登录,但我不知道如何正确添加具有密码和角色的用户。
我试过通过数据库创建用户,在角色字段中使用这样的字符串:
{"path":"^/admin","roles":"ROLE_ADMIN"}
(我在 security.yml 上的 "access_control" 下发现了 JSON)
但是当我尝试以该用户身份登录时,我收到一条消息说 "Invalid credentials." 我怀疑这是因为安全性正在使用加密并且我添加到数据库中的用户是纯文本。
如果您对我如何添加用户以测试 MakerBundle 的 make:auth 功能添加的安全性有任何建议,请告诉我。
更新:感谢威廉的回答!这是您提供的允许我登录的固定装置的修改版本。
<?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();
}
}
?>
解决方案之一是使用固定装置。根据文档:DoctrineFixturesBundle,我想你可以做一个用户夹具 class,比如:
<?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