<?php
declare(strict_types=1);
namespace App\Controller\Blo;
use App\Entity\User;
use App\Form\ClientRegistrationFormType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
/**
* Connexion et inscription clients BLO.
*/
class AuthController extends AbstractController
{
#[Route('/connexion', name: 'blo_login', methods: ['GET'])]
public function login(): Response
{
if ($this->getUser()) {
return $this->redirectToRoute('app_blo_home_index');
}
return $this->redirectToRoute('login');
}
#[Route('/inscription', name: 'blo_register', methods: ['GET', 'POST'])]
public function register(
Request $request,
UserPasswordHasherInterface $passwordHasher,
EntityManagerInterface $em,
TokenStorageInterface $tokenStorage,
): Response {
if ($this->getUser()) {
return $this->redirectToRoute('app_blo_home_index');
}
$user = new User();
$form = $this->createForm(ClientRegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$passwordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setRoles(['ROLE_USER', 'ROLE_CUSTOMER']);
$user->setRole(null);
$user->setStatus(true);
$em->persist($user);
$em->flush();
// Connexion automatique après inscription
$token = new UsernamePasswordToken($user, 'main', $user->getRoles());
$tokenStorage->setToken($token);
$request->getSession()->set('_security_main', serialize($token));
$this->addFlash('success', 'Votre compte a été créé. Vous êtes connecté.');
return $this->redirectToRoute('app_blo_home_index');
}
return $this->render('blo/auth/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
}