FOSUserBundle уже имеет всю необходимую функциональность.
1) найти пользователь от запрашиваемой электронной почты
2) проверить, что текущий пользователь уже не требуется новый пароль
3) генерирует маркер подтверждения для пользователя
4) использовать реализацию почтовой FOSUserBundle для отправки сообщения электронной почты сброса
5) пользователя обновление
6) возвращает ответ
Вы могли бы сделать что-то вроде этого:
/**
* @Route("/resetpassword/{userEmail}", name="user_password_reset-request")
* @Method("GET")
*/
public function resetPasswordRequestAction(Request $request)
{
$email = $request->query->get('userEmail');
$user = $this->get('fos_user.user_manager')->findUserByEmail($email);
if (null === $user) {
throw $this->createNotFoundException();
}
if ($user->isPasswordRequestNonExpired($this->container->getParameter('fos_user.resetting.token_ttl'))) {
throw new BadRequestHttpException('Password request alerady requested');
}
if (null === $user->getConfirmationToken()) {
/** @var $tokenGenerator \FOS\UserBundle\Util\TokenGeneratorInterface */
$tokenGenerator = $this->get('fos_user.util.token_generator');
$user->setConfirmationToken($tokenGenerator->generateToken());
}
$this->get('fos_user.mailer')->sendResettingEmailMessage($user);
$user->setPasswordRequestedAt(new \DateTime());
$this->get('fos_user.user_manager')->updateUser($user);
return new Response(Response::HTTP_OK);
}
Вы должны сгенерировать уникальный идентификатор, сохранить его в пользователе таблицы в поле типа «password_key». Когда пользователь нажмет на него, отобразите форму для сброса своего pwd (подтверждение по электронной почте, pwd, pwd). В методе сброса проверьте, прошел ли уникальный идентификатор, который у вас есть в вашей базе данных для этого конкретного пользователя. – Delphine
Спасибо, это мне помогло! – Oudstand
Добро пожаловать;) – Delphine