设置"更改密码"网站的功能我有一个辅助密码输入(您需要再次输入密码才能更改)。
我需要能够根据输入的密码检查用户的当前密码(使用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
。
答案 0 :(得分:9)
您可以使用编码器服务的$currentPassword
方法将isPasswordValid
密码与存储的密码进行比较:
$encoderService = $this->container->get('security.password_encoder')
然后将用户对象作为方法的第一个参数传递:
$match = $encoderService->isPasswordValid($userObject, $currentPassword)
如果比较匹配将返回true
,否则返回false
。