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.
| 归档时间: |
|
| 查看次数: |
4583 次 |
| 最近记录: |