我正在使用带有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。 但密码未加密。
我如何加密密码?
感谢
答案 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。