FOSUserBundle/Symfony3: 更改前检查当前密码
FOSUserBundle/Symfony3: Check current password before changing it
我正在使用 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;
}
而不是 "encodePassword",它会生成新的密码哈希。您需要使用 "isPasswordValid" 来检查当前密码是否与当前密码哈希匹配。编码新的和验证现有的是有区别的。
参考:How to check if a username/password combination is valid for FOS UserBundle
我正在使用 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;
}
而不是 "encodePassword",它会生成新的密码哈希。您需要使用 "isPasswordValid" 来检查当前密码是否与当前密码哈希匹配。编码新的和验证现有的是有区别的。
参考:How to check if a username/password combination is valid for FOS UserBundle