У меня проблема при попытке сбросить пароль не зарегистрированного пользователя.
Юридические лица:
class Users implements AdvancedUserInterface, \Serializable, TwoFactorInterface, TrustedDeviceInterface {
[...]
}
Сброс пароля Действие:
public function forgetPassword(Request $request, EntityManagerInterface $em, UserPasswordEncoderInterface $encoder)
{
$changePasswordModel = new ChangePassword();
$form = $this->createForm(ForgetPasswordType::class, $changePasswordModel);
$form->handleRequest($request);
$user = $em->getRepository("App:Users")->find(12);
if (!$request->get('token') || !$user || $user->getTokenExpire() <= new \DateTime())
{
return $this->redirectToRoute("404");
}
if ($form->isSubmitted() && $form->isValid())
{
$plainPassword = $form->getData()->getNewPassword();
$encoded = $encoder->encodePassword($user, $plainPassword);
$user->setPassword($encoded);
$em->persist($user);
$em->flush();
}
return $this->render('security/forget_password.html.twig', array(
'form' => $form->createView(),
'success' => $success
));
}
Но я получаю эту ошибку:
The User object must implement the UserInterface interface.
Точное место этой ошибки:
\ vendor \ symfony \ security \ Core \ Validator \ Constraints \ UserPasswordValidator.php:
[...]
$user = $this->tokenStorage->getToken()->getUser();
if (!$user instanceof UserInterface) {
throw new ConstraintDefinitionException('The User object must
implement the UserInterface interface.');
}
[...]
Когда пользователь вошел в систему, это работает, но когда пользователь использует пароль сброса, это потому, что он потерял свой пароль. Так что он должен работать, когда пользователь не зарегистрирован.
Спасибо за вашу помощь!
Alex