Symfony 加密密码

Symfony Encrypt Password

我正在使用带有 FormBuilder 的 symfony 3。

现在我创建注册表..

我遇到的一个问题是使用 encode 来加密密码

今天我用的是这样的:

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()
    ]);
}

每个文件都输入到数据库中。 但是密码没有加密。

如何加密密码?

谢谢

您应该遵循文档:How to implement a registration form.

基本上,您的 RegisterType 应该有一个默认的 class 和实现 UserInterfaceUser 并且当您保存表单时密码应该被加密。

在 symfony 2.7 中有一个 class 名为 MessageDigestPasswordEncoder。

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

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

您可以使用 security.yml 的配置填充 $algorithm、$encode_as_base64 和 $iterations 的值,用 Yaml::parse 解析 security.yml 的内容。或者简单地使用那里定义的相同值。

获得编码器后,调用方法 encodePassword

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

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