我已经按照symfony 主页上的指南(编码用户密码和如何自定义表单登录)进行操作。
新创建的用户将使用加密密码存储到数据库中(加密发生在控制器中)。但是,当我尝试使用数据库中的用户登录时,由于比较来自登录表单的原始密码和来自数据库的加密密码,身份验证失败。
所以我的问题是如何在 login_check 之前加密来自登录表单的密码?扩展例如DaoAuthenticationProvider是否是一个合适的解决方案?或者我的方法完全错误,因为我将加密与模型分开?
安全性.yml:
security:
encoders:
MyCorp\UserBundle\Entity\User:
algorithm: sha512
encode_as_base64: true
iterations: 1000
providers:
db_users:
entity: {class: MyCorpUserBundle:User, property: username}
用户控制器(创建时加密的示例):
/**
* Creates a new User entity.
*
* @Route("/", name="user_create")
* @Method("POST")
* @Template("MyCorpUserBundle:User:new.html.twig")
*/
public function createAction(Request $request)
{
$entity = new User();
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($entity);
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$pasword = $encoder->encodePassword($entity->getPassword(), $user->getSalt());
$entity->setPassword($pasword);
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('user_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}