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

时间:2017-10-25 07:02:34

标签: symfony fosuserbundle

我正在使用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 个答案:

答案 0 :(得分:2)

而不是“encodePassword”,它生成一个新的密码哈希。您需要使用“isPasswordValid”来检查当前密码是否与当前密码哈希匹配。编码新的和验证现有的有区别。

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