2017-10-25 3 views
0

私はSymfony3とFOSUserBundleを使用しています。FOSUserBundle/Symfony3:変更する前に現在のパスワードを確認してください

私は入力に自分の古いパスワードをそれらを尋ねるとNEW任意のパスワードを新しいです

。彼らはすでにログインしているとき、私のユーザーが自分のパスワードを変更することができますアクションを作成しようとしていますし、私がしたいです現在OLDパスワードが現在記録されているパスワードと同じであることを確認します。

奇妙な理由から、エンコーダは間違ったハッシュを返し続けます。私はここで間違って何をしていますか?

$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

"encodePassword"ではなく、新しいパスワードハッシュを生成します。現在のパスワードが現在のパスワードハッシュと一致するかどうかを確認するには、 "isPasswordValid"を使用する必要があります。新しいエンコーディングと既存のエンコーディングの間には違いがあります。

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

関連する問題