如何使用 sonata admin 创建用户
How to create user with fixtures with sonata admin
我在 Symfony 4.2 中使用 FOSUserBundle 启动了我的应用程序,并制作了一个 fixture 文件来创建管理员。
use FOS\UserBundle\Doctrine\UserManager;
...
/** @var UserManager $userManager */
$userManager = $this->getContainer()->get('fos_user.user_manager');
/** @var User $user */
$user = $userManager->createUser();
$user
->setUsername('username')
->setEmail('email')
->setPlainPassword('password')
->setSuperAdmin(true);
$manager->persist($user);
$manager->flush();
它运行良好,但后来我决定使用 SonataAdmin 和 ACL。
从那以后,我就不能再用管理员登录了。
但是如果我使用 bin/console fos:user:create --super-admin
命令创建管理员用户,而不是来自 fixture 文件的那个,我可以正常登录。
检查数据库,两个用户之间的唯一区别是盐和密码哈希,但这是预期的。
就是说,有人能解释一下我需要在 fixture 文件中更改什么才能创建一个有效的管理员用户吗?
提前致谢。
答案在FOS\UserBundle\Command\CreateUserCommand
中。您需要使用 FOS\UserBundle\Util\UserManipulator
创建用户。
use FOS\UserBundle\Util\UserManipulator;
...
/** @var UserManipulator $userManipulator */
$userManipulator = $this->getContainer()->get('fos_user.util.user_manipulator');
$user = $userManipulator->create( 'username', 'password', 'email', true, true);
我在 Symfony 4.2 中使用 FOSUserBundle 启动了我的应用程序,并制作了一个 fixture 文件来创建管理员。
use FOS\UserBundle\Doctrine\UserManager;
...
/** @var UserManager $userManager */
$userManager = $this->getContainer()->get('fos_user.user_manager');
/** @var User $user */
$user = $userManager->createUser();
$user
->setUsername('username')
->setEmail('email')
->setPlainPassword('password')
->setSuperAdmin(true);
$manager->persist($user);
$manager->flush();
它运行良好,但后来我决定使用 SonataAdmin 和 ACL。
从那以后,我就不能再用管理员登录了。
但是如果我使用 bin/console fos:user:create --super-admin
命令创建管理员用户,而不是来自 fixture 文件的那个,我可以正常登录。
检查数据库,两个用户之间的唯一区别是盐和密码哈希,但这是预期的。
就是说,有人能解释一下我需要在 fixture 文件中更改什么才能创建一个有效的管理员用户吗?
提前致谢。
答案在FOS\UserBundle\Command\CreateUserCommand
中。您需要使用 FOS\UserBundle\Util\UserManipulator
创建用户。
use FOS\UserBundle\Util\UserManipulator;
...
/** @var UserManipulator $userManipulator */
$userManipulator = $this->getContainer()->get('fos_user.util.user_manipulator');
$user = $userManipulator->create( 'username', 'password', 'email', true, true);