Symfony加密密码

时间:2016-10-20 14:09:51

标签: symfony formbuilder

我正在使用带有FormBuilder的symfony。

现在我创建了注册表格..

我得到的一个问题是使用编码来加密密码

今天我正在使用像这样:

public function SignupAction(Request $request){
    $form = $this->createForm(RegisterType::class);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()){
        $em = $this->getDoctrine()->getManager();
        $em->persist($form->getData());
        $em->flush();
        return $this->redirectToRoute('homepage');
    }
    return $this->render('AppBundle:Site:Register.html.twig', [
        'form' => $form->createView()
    ]);
}

每个字段都输入到DB。 但密码未加密。

我如何加密密码?

感谢

2 个答案:

答案 0 :(得分:0)

您应该按照文档:How to implement a registration form.

基本上,您的RegisterType应该有一个默认类User来实现UserInterface,并且在保存表单时应该加密密码。

答案 1 :(得分:0)

在symfony 2.7中有一个名为MessageDigestPasswordEncoder的类。

所以你可以得到一个编码器:

 $encoder = new \Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder($algorithm,$encode_as_base64, $iterations);

你可以使用yaml :: parse解析security.yml的内容,使用security.yml的配置来填充$ algorithm,$ encode_as_base64和$ iterations的值。或者只是使用那里定义的相同值。

一旦你有了enconder,就调用encodePassword方法

 $password = $encoder->encodePassword($password, $salt)

使用编码器的相同配置返回编码密码。请注意,您必须提供$ salt值。您可以按照建议使用random_bytes