代码之家  ›  专栏  ›  技术社区  ›  Dimitris Romeo Havlidis

FOSUserBundle/Symfony3:在更改当前密码之前检查它

  •  1
  • Dimitris Romeo Havlidis  · 技术社区  · 7 年前

    我使用的是Symfony3和FOSUserBundle。

    我要求他们输入他们的旧密码和新的所需密码,我想检查旧密码是否与当前记录的密码相同。

    出于某种奇怪的原因,编码器不断返回错误的散列。我做错了什么?

        $user = $this->getUser();
        $newPasswordPlain = 'newpassword';
        $currentPasswordForValidation = 'test';
    
        $encoder_service = $this->get('security.encoder_factory');
        $encoder = $encoder_service->getEncoder($user);
        $encodedPassword = $encoder->encodePassword($currentPasswordForValidation, $user->getSalt());
    
        var_dump( $encodedPassword);
        var_dump( $user->getPassword());
    
        if ( $user->getPassword() == $encodedPassword ) {
            $userManager = $this->container->get('fos_user.user_manager');
            $user->setPlainPassword($newPasswordPlain);
            $userManager->updateUser($user, true);
        } else {
            var_dump('error: not the same password'); exit;
        }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   MEmerson Sehael    7 年前

    而不是生成新密码哈希的“encodePassword”。您需要使用“isPasswordValid”检查当前密码是否与当前密码哈希匹配。编码新的和验证现有的之间存在差异。

    参考: How to check if a username/password combination is valid for FOS UserBundle