0

我正在使用 Symfony 3.4 和 FOSUserBundle。我创建了一个表单来创建新用户,它运行良好,但密码以明文形式存储在数据库中。

当我使用命令“fos:user:create”时,我没有问题。这是我的 security.yml 配置:

security:
    encoders:
        MyCompany\PimCoreBundle\Entity\User: bcrypt

-> 下面是我的用户创建表单:

$user = new User();

$formBuilder = $this->get('form.factory')->createBuilder(FormType::class, $user)
->add('username',      TextType::class)
->add('firstname',      TextType::class)
->add('lastname',     TextType::class)
->add('email',   TextType::class)
->add('password',    PasswordType::class)
->add('enabled',   CheckboxType::class, array('required' => false))
->add('save', SubmitType::class)
->getForm();

if ($request->isMethod('POST'))
{

$formBuilder->handleRequest($request);

if ($formBuilder->isValid())
{

    // HERE (I GUESS) :
    // I have to get password with $user->getPassword, encode it 
    // and then save it within $user->setPassword() ?

    $em = $this->getDoctrine()->getManager();
    $em->persist($user);
    $em->flush();

    return $this->redirectToRoute('route_confirm_user_added');

}
}

我不明白我是否必须对表单中的密码以及要使用的类进行编码。谢谢您的帮助 !

4

1 回答 1

0

您需要使用 plainPassword 而不是密码字段。

我没有使用表单对其进行测试,但您可以在表单验证后在控制器中设置密码:

$user->setPlainPassword($password);

它应该在你的控制器中给你类似的东西:

if ($formBuilder->isValid())
{
    $password = $formBuilder['password']->getData();
    $user->setPlainPassword($password);

希望它有所帮助

于 2018-02-01T16:50:17.033 回答