Php Symfony 3:如何实现密码更新?
我正在尝试实现密码更新。因此,我要求: 1) 当前密码 2) 新密码 3) 重复输入新密码 UserProfileForm中的我的表单生成器如下所示:Php Symfony 3:如何实现密码更新?,php,symfony,Php,Symfony,我正在尝试实现密码更新。因此,我要求: 1) 当前密码 2) 新密码 3) 重复输入新密码 UserProfileForm中的我的表单生成器如下所示: class UserProfileForm extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('plainPa
class UserProfileForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'first_options' => array(
'label' => 'Password',
'constraints' => array(new NotBlank(array(
'groups' => array(
'updatePasswordChecked',
)
))),
),
'second_options' => array(
'label' => 'Repeat password',
'constraints' => array(new NotBlank(array(
'groups' => array(
'updatePasswordChecked',
)
))),
),
'invalid_message' => 'Passwords don\'t match!',
))
->add('oldPassword', PasswordType::class)
->add('save', SubmitType::class, array('label' => 'Save'));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\User',
'validation_groups' => array('update'),
));
}
}
在用户实体中,我添加了$oldPassword:
/**
* @SecurityAssert\UserPassword(
* message = "Wrong value for your current password",
* groups = {"updatePasswordChecked"}
* )
*/
private $oldPassword;
我尝试更新密码的控制器:
class ProfileController extends Controller
{
public function detailAction(Request $request)
{
$user = $this->get('security.token_storage')->getToken()->getUser();
$form = $this->createForm(UserProfileForm::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted())
{
if ($form->isValid())
{
dump('valid');
// do whatever is needed to update the password
}
}
return $this->render('pages/profile.html.twig', array('profileForm' => $form->createView()));
}
}
在使用正确的旧密码提交表单后,我得到一个错误,即旧密码错误,系统会自动将我注销
在Symfony profiler中,我可以看到提交了正确的数据
我做错了什么?您应该查看fosuser捆绑包是如何做到这一点的,这将为您提供一个清晰的概念。另外,在控制器内部,您不需要执行
$user=$this->get('security.token_storage')->getToken()->getUser()
只需$this->getUser()
就足以获取当前用户。在验证密码之前,您似乎忘记了加密普通的旧密码。