【发布时间】:2015-08-21 06:33:28
【问题描述】:
我在数据库中有用户,他们的密码使用以下加密:
security:
encoders:
AppBundle\Entity\User:
algorithm: bcrypt
用户注册后,用于编码的密码:
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $password);
$user 来自哪里
$form->handleRequest ( $request );
在它的表单被验证之后。在这种情况下,$password 是纯文本。 完成后,我会在我的对象中看到散列字符串:
$2y$13$DF.Es7XjAQKrRklZXRyLX.YYzRG7gC3XOLA72eul6BEVigMbvir4C
在我的控制器中,当我尝试修改用户密码时,我添加了一个新字段,如下所示:
$form->add ( 'oldpassword', 'password', array('label'=>'old password', 'required'=>true, 'error_bubbling'=>true, 'mapped' => false) );
所以我可以达到它的价值
$form->get('oldpassword')->getData()
我的目标是在将对象刷新到数据库之前检查“旧密码”字段与保存的字段 ($user->getPassword())。
现在看起来是这样的:
$form->handleRequest ( $request );
if ($form->isSubmitted ()) {
if ( !$functions->passwordVerify($user, $form->get('oldpassword')->getData()) ) {
$form->get ( 'oldpassword' ) ->addError ( new FormError ( "Your current password is invalid" ) );
}
其中 $functions 是注入服务的函数:
public function passwordVerify($user=null, $oldpassword=null) {
$encoder = $this->container->get('security.password_encoder');
$valid = $encoder->isPasswordValid($user, $oldpassword);
return $valid;
}
不知何故,$valid 变量总是返回 false。 我为“oldpassword”写的密码和我注册时使用的完全一样(编码器见上面的代码)。
看起来永远不会生成相同的哈希/令牌...
提前谢谢你。
【问题讨论】:
-
确保你没有换盐..
-
不确定 symfony,但对我来说,您似乎传递了错误的参数,密码编码器几乎不会从用户那里获取密码。不应该是
$encoder->encodePassword($password);和$encoder->isPasswordValid($password, $oldpassword);吗?查看文档。
标签: forms validation security symfony passwords