【问题标题】:Symfony Forgotten Password without FosUserBundle没有 FosUserBundle 的 Symfony 忘记密码
【发布时间】:2018-07-29 10:55:52
【问题描述】:

所以我正在尝试使用 symfony 创建一个网站,该网站将拥有用户。 这些用户需要能够从他们的帐户中更改他们的密码(这应该不难,一个简单的表单,在提交时会更改当前user 的密码)但是我正在努力设计一种实现“为完全忘记密码的用户重置密码”。

我的计划是让用户收到一封带有唯一链接的电子邮件。当访问该链接时,symfony(通过slug 标签)检查该链接是否在最后 5 分钟内发出。 (可能需要一个带有链接列表的数据库,需要用户名时间)。然后用户将获得一个简单的表单,他们可以在其中输入新密码,然后被重定向到登录页面。

我的问题是,当用户实际上没有经过身份验证时,我不能希望运行getUser。即使我的时间、链接和用户名数据库可以指向特定用户,据我所知,Symfony 不会加载user 类,直到它们通过密码正确验证。我该如何解决这个问题?我是否应该手动写入数据库而不涉及 securityBundle / user 类?谢谢。

【问题讨论】:

    标签: php symfony authentication


    【解决方案1】:

    您可以随时加载用户。当您在重置页面并且时间有效时,您还知道用户 ID 使用用户管理器或您的服务是什么并更改用户密码。

    【讨论】:

      【解决方案2】:

      使用您的Repository/UserRepository 类从数据库中获取User 实体。修改User 对象并使用EntityManager 类将其持久化。

      $userRepo = $doctrine->getRepository( 'User' );
      
      $user = $userRepo->find( $userId );
      
      if ( $user !== null ) {
      
          $encryptedPassword = someHowEncryptThePassword( $plainPassword );
          $user->setPassword( $encryptedPassword );
      
          $em = $doctrine->getManager();
          $em->persist( $user );
          $em->flush();
      
      }
      

      【讨论】:

        【解决方案3】:

        在我看来,您应该存储具有用户关系的唯一链接。

        //Quick example
        $user = $em->getRepository( 'App:User' )->findByEmail($email);
        
        $lostPassword = new LostPassword();
        $lostPassword->setUser($user);
        $lostPassword->setHash(uniqid());
        //Use hash to send the email to the user here
        

        前面的代码是用户用他的电子邮件填写表单时的代码。您保存用户和生成的哈希并发送电子邮件。

        在密码重置路径中,您只需获取哈希并对其进行查找

         $lostPassword= $em->getRepository( 'App:LostPassword' )->findByHash($hash);
         $user = $lostPassword->getUser();
         //Your code managment to change the password
        

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2013-12-09
          • 2012-07-25
          • 1970-01-01
          • 2012-12-20
          • 2013-05-17
          • 2011-08-26
          • 2015-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多