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

时间:2017-04-22 22:25:42

标签: php symfony passwords bcrypt

设置"更改密码"网站的功能我有一个辅助密码输入(您需要再次输入密码才能更改)。

我需要能够根据输入的密码检查用户的当前密码(使用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.
    // ...
}

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

由于Bcrypt在密码摘要中加入了盐,我不会将其保存在任何地方。

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

我没有使用FOSUserBundle

1 个答案:

答案 0 :(得分:9)

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

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

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

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

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