如何在Symfony 3中比较密码(Bcrypt哈希)?

121*_*21c 4 php passwords bcrypt symfony

在为站点设置"更改密码"功能时,我有一个二级密码输入(您需要再次输入密码才能更改密码).

我需要能够根据输入的密码检查用户的当前密码(使用Bcrypt进行哈希).

在我的控制器动作中,我有:

$currentPassword = $request->request->get('password');
$encoder = $this->container->get('security.password_encoder');
$encodedPassword = $encoder->encodePassword($user, $currentPassword);

if($encodedPassword == $user->getPassword()) { // these don't ever match.
    // ...
}
Run Code Online (Sandbox Code Playgroud)

encodePassword(...)生成输入密码的摘要,但它与保存的密码不同(明文相同),所以我认为正在应用不同的盐,从而产生不匹配.

由于Bcrypt在密码摘要中包含了salt,因此我不会将其保存在任何地方.

如何检查输入的纯文本密码是否与Symfony 3中存储的Bcrypt摘要相匹配?

我没用FOSUserBundle.

gp_*_*ver 11

您可以$currentPassword使用isPasswordValid编码器服务的方法将密码与存储的密码进行比较:

$encoderService = $this->container->get('security.password_encoder')

然后将用户对象作为方法的第一个参数传递:

$match = $encoderService->isPasswordValid($userObject, $currentPassword)

true如果比较匹配,则返回false.