如何在 symfony 中使用 bcrypt 密码加密添加管理员?

How to add an administrator with bcrypt password encryption in symfony?

我在使用 symfony 2.6 开发网站时遇到了 "strange" 问题。 我已经设置了所有安全内容,包括在注册时(使用 bcrypt)对用户和管理实体进行密码加密。现在我想添加一个管理员和一个用户来尝试我的登录引擎是否运行良好,但显然我无法在我的网站上注册一个新的 user/admin 因为安全引擎(即我无法访问 addUser 页面,因为没有管理员注册)。我试图直接从 phpMyAdmin 控制台创建一个管理员,但是在我输入管理员密码的那一刻,它被保存为纯文本(与我引擎中存储加密密码的注册阶段不同),所以登录失败。

那么,我该如何解决这个问题?

希望大家明白这一点,否则尽管问!

提前致谢, 潘克

使用任何生成 bcrypt 密码的网页,例如 one。生成密码并将其加密存储在您的数据库中。使用您创建的用户和通行证登录(显然,它的非加密版本)。

应该可以。

好的,所以我发现这个伟大而简单的 tutorial 解释了如何 "autogenerate" 用户使用 Doctrine 的 Fixtures,其中有一个名为 "load" 的方法,它只是以下:

public function load(ObjectManager $manager)
{
  $user = new User();
  $user->setUsername("someuser");
  $user->setSalt(md5(uniqid()));
  $encoder = $this->container->get('security.encoder_factory')->getEncoder($user);
  $user->setPassword($encoder->encodePassword('blue', $user->getSalt()));
  $user->setEmail("someuser@mail.ca");

  $manager->persist($user);

  $manager->flush();
}

也感谢@acontell 的回复。也许我的解决方案将来会对您有所帮助。 :)

Symfony 3 为此提供了一个非常有用的命令:security:encode-password

The security:encode-password command encodes passwords according to your security configuration. This command is mainly used to generate passwords for the in_memory user provider type and for changing passwords in the database while developing the application.

php ./bin/console security:encode-password --no-interaction _password_ "App\Entity\User"

给予

 ------------------ ----------------------------------------------------------------------
  Key                Value
 ------------------ ----------------------------------------------------------------------
  Encoder used       Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder
  Encoded password   94H61KiSMDm60HL63z+s8AxLUTqwVv8aoKshC3X1q5A=
  Generated salt     tyPR/b4ussonYznhJ/bgtlTKSerBznRcNEPgSNmW
 ------------------ ----------------------------------------------------------------------