我在开发一个使用 symfony 2.6 的网站时遇到了一个"奇怪"的问题。我已经设置了所有安全内容,包括注册时(使用 bcrypt)到用户和管理员实体的密码加密。现在我想添加一个管理员和一个用户来尝试我的登录引擎是否运行良好,但显然由于安全引擎,我无法向我的网站注册新用户/管理员(即我无法访问 addUser 页面,因为没有注册管理员)。我尝试直接从phpMyAdmin控制台创建管理员,但是在我输入管理员密码的那一刻,它被保存为明文(与我的引擎中的注册阶段不同,它存储加密密码),因此登录失败。
那么,我该如何解决这个问题呢?
希望大家都明白这一点,否则请随时询问!
提前感谢,潘克
好的,所以我找到了这个伟大而简单的教程,它解释了如何使用 Doctrine 的夹具"自动生成"用户,其中有一个名为"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他的回应。也许我的解决方案将来会对您有所帮助。:)
使用任何生成 bcrypt 密码的网页,例如这个。生成密码并将其加密存储在数据库中。使用您创建的用户和通行证(显然是它的非加密版本)登录。
它应该有效。
Symfony 3为此提供了一个非常有用的命令:security:encode-password
security:encode-password 命令根据 您的安全配置。此命令主要用于生成 in_memory用户提供程序类型和更改的密码 开发应用程序时数据库中的密码。
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
------------------ ----------------------------------------------------------------------