1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
class SecurityController extends AbstractController
{
/**
* @Route("/forgottenPassword", name="app_forgotten_password")
*/
public function forgottenPassword(
Request $request,
UserPasswordEncoderInterface $encoder,
\Swift_Mailer $mailer,
TokenGeneratorInterface $tokenGenerator
): Response
{
if ($request->isMethod('POST')) {
$email = $request->request->get('email');
$entityManager = $this->getDoctrine()->getManager();
$user = $entityManager->getRepository(User::class)->findOneByEmail($email);
/* @var $user User */
if ($user === null) {
$this->addFlash('danger', 'Email Inconnu');
return $this->redirectToRoute('home');
}
$token = $tokenGenerator->generateToken();
try{
$user->setResetToken($token);
$entityManager->flush();
} catch (\Exception $e) {
$this->addFlash('warning', $e->getMessage());
return $this->redirectToRoute('home');
}
$url = $this->generateUrl('app_reset_password', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
$message = (new \Swift_Message('Forgot Password'))
->setFrom(['postmain@dos.org' => 'dos.org'])
->setTo($user->getEmail())
->setBody(
"Voici le token pour reseter votre mot de passe : <br/>" . $url,
'text/html'
);
$mailer->send($message);
$this->addFlash('notice', 'Mail envoyé');
return $this->redirectToRoute('devosi');
}
return $this->render('security/forgotten_password.html.twig');
}
/**
* @Route("/reset_password/{token}", name="app_reset_password")
*/
public function resetPassword(Request $request, string $token, UserPasswordEncoderInterface $passwordEncoder)
{
if ($request->isMethod('POST')) {
$entityManager = $this->getDoctrine()->getManager();
$user = $entityManager->getRepository(User::class)->findOneByResetToken($token);
/* @var $user User */
if ($user === null) {
$this->addFlash('danger', 'Token Inconnu');
return $this->redirectToRoute('home');
}
$user->setResetToken(null);
$user->setPassword($passwordEncoder->encodePassword($user, $request->request->get('password')));
$entityManager->flush();
$this->addFlash('notice', 'Mot de passe mis à jour');
return $this->redirectToRoute('home');
}else {
return $this->render('security/reset_password.html.twig', ['token' => $token]);
}
}
} |
Partager