Ich versuche, ein Formular zu erstellen, das Benutzerkennwort zurücksetzt. Ich verwende FOSUserBundle Benutzer zu verwalten, aber ich will nicht außer Kraft setzen FOSUser Zurücksetzen Controller aufgrund einiger Gründe ArchitekturSymfony2 Kennwortzurücksetzung ohne überschreiben FOSUser
Also beschloss ich, meine eigene Art und Controller zu bauen Passwort zurücksetzen
PasswordResettingType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'attr' => ['class' => 'form-group has-feedback'],
'first_options' => array('label' => false,
'attr' => ['placeholder' => 'New Password']
),
'second_options' => array('label' => false,
'attr' => ['placeholder' => 'Repeat Password']),
'invalid_message' => 'Passwords don't match',
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'CoreBundle\Entity\User',
'csrf_token_id' => 'resetting'
));
}
Zurücksetzen Controller
/**
* @Route("/reset/{token}", name="api_resetting_reset")
*/
public function resetAction(Request $request, $token)
{
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserByConfirmationToken($token);
if (null === $user) {
return $this->render('APIBundle:Resetting:error.html.twig');
}
$form = $this->createForm(PasswordResettingType::class, $user);
$form->handleRequest($request);
if ($form->isValid()) {
$user->setConfirmationToken(null);
$user->setPasswordRequestedAt(null);
$user->setPlainPassword($form["plainPassword"]->getData());
$userManager->updateUser($user);
return $this->redirectToRoute('api_resetting_success');
}
return $this->render('APIBundle:Resetting:reset.html.twig', array(
'token' => $token,
'form' => $form->createView()
));
}
reset.html.twig
{{ form_start(form) }}
{% for passwordField in form.plainPassword %}
<div class="form-group has-feedback">
{{ form_widget(passwordField, { 'attr': {'class': 'form-control'} }) }}
<span class="show">show</span>
{{ form_errors(passwordField) }}
</div>
{% endfor %}
<input type="submit" class="btn" value="Submit" />
{{ form_end(form) }}
Aber wenn ich Formular absende, ist das neue Passwort nicht gesetzt, ConfirmationToken und PasswordRequestedAt sind nicht auf null gesetzt.
Ich sollte eine dumme Frage stellen, weil ich persönlich auf das Problem wie folgt stapeln könnte: Sind Sie sicher, dass Sie $ form-> isValid() = true? Kein anderer Grund für diesen Code nicht zu funktionieren. – Danny
Nein, das ist keine blöde Frage :) und ja, ich habe das überprüft und ich bin verwirrt, dass der Code immer noch nicht funktioniert. – blahblah
Haben Sie versucht, in Ihrer Protokolldatei nachzuschauen, was gerade passiert? –