Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2:登录检查前对密码进行编码_Symfony_Login_Hash - Fatal编程技术网

Symfony2:登录检查前对密码进行编码

Symfony2:登录检查前对密码进行编码,symfony,login,hash,Symfony,Login,Hash,我遵循了symfony主页上的指南 新创建的用户将使用加密密码存储到数据库中(加密发生在控制器中)。但是,当我尝试使用数据库中的用户登录时,由于比较来自登录表单的原始密码和来自数据库的加密密码,身份验证失败 所以我的问题是如何在登录检查之前加密登录表单中的密码?扩展例如DaoAuthenticationProvider是一个合适的解决方案吗?还是我的方法完全错误,因为我将加密与模型分开 security.yml: security: encoders: MyCorp\User

我遵循了symfony主页上的指南

新创建的用户将使用加密密码存储到数据库中(加密发生在控制器中)。但是,当我尝试使用数据库中的用户登录时,由于比较来自登录表单的原始密码和来自数据库的加密密码,身份验证失败

所以我的问题是如何在登录检查之前加密登录表单中的密码?扩展例如DaoAuthenticationProvider是一个合适的解决方案吗?还是我的方法完全错误,因为我将加密与模型分开

security.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(),
     );
 }
用户控制器(创建时加密的示例):

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

你认为为什么会使用原始密码?原始密码确实是通过网络发送的,但为了验证密码,Symfony使用了与您编码密码相同的编码器

它使用PasswordEncoderInterface-的另一个方法,该方法接受未编码的原始密码


你的应用程序肯定有其他问题。顺便说一句,您的salt生成了吗?

n确认,谢谢您的PasswordEncoderface提示。我调试了使用过的身份验证提供程序,注意到数据库字段的大小对于生成的哈希来说不够长。这就是比较失败的原因。