Registration and login perfect
This commit is contained in:
69
src/Security/LoginFormAuthenticator.php
Normal file
69
src/Security/LoginFormAuthenticator.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Security;
|
||||
|
||||
use App\Entity\Participant;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
|
||||
use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
|
||||
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
|
||||
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
|
||||
class LoginFormAuthenticator extends AbstractAuthenticator
|
||||
{
|
||||
private $entityManager;
|
||||
private $urlGenerator;
|
||||
|
||||
public function __construct(EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator)
|
||||
{
|
||||
$this->entityManager = $entityManager;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
}
|
||||
|
||||
public function supports(Request $request): ?bool
|
||||
{
|
||||
return $request->getPathInfo() === '/login' && $request->isMethod('POST');
|
||||
}
|
||||
|
||||
public function authenticate(Request $request): Passport
|
||||
{
|
||||
$identifier = $request->request->get('username');
|
||||
$password = $request->request->get('password');
|
||||
|
||||
// Chercher l'utilisateur par email ou pseudo
|
||||
$user = $this->entityManager->getRepository(Participant::class)->findOneBy([
|
||||
'email' => $identifier
|
||||
]) ?? $this->entityManager->getRepository(Participant::class)->findOneBy([
|
||||
'pseudo' => $identifier
|
||||
]);
|
||||
|
||||
if (!$user) {
|
||||
throw new AuthenticationException('Identifiant ou mot de passe incorrect.');
|
||||
}
|
||||
|
||||
// Utilisation de UserBadge au lieu de Participant directement
|
||||
return new Passport(
|
||||
new UserBadge($user->getEmail()), // Utilisation de l'email ou du pseudo pour l'identification
|
||||
new PasswordCredentials($password) // Ajout du mot de passe pour la vérification
|
||||
);
|
||||
}
|
||||
|
||||
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?RedirectResponse
|
||||
{
|
||||
return new RedirectResponse($this->urlGenerator->generate('home'));
|
||||
}
|
||||
|
||||
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?RedirectResponse
|
||||
{
|
||||
return new RedirectResponse($this->urlGenerator->generate('app_login'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Security;
|
||||
|
||||
use App\Entity\Participant;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
//use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
||||
|
||||
class UserProvider implements UserProviderInterface
|
||||
{
|
||||
private $entityManager;
|
||||
|
||||
public function __construct(EntityManagerInterface $entityManager)
|
||||
{
|
||||
$this->entityManager = $entityManager;
|
||||
}
|
||||
|
||||
public function loadUserByIdentifier(string $username): UserInterface
|
||||
{
|
||||
// Cherche par email ou pseudo
|
||||
$user = $this->entityManager->getRepository(Participant::class)
|
||||
->findOneBy(['email' => $username]) // Cherche par email
|
||||
?? $this->entityManager->getRepository(Participant::class)
|
||||
->findOneBy(['pseudo' => $username]); // Ou par pseudo
|
||||
|
||||
if (!$user) {
|
||||
throw new UsernameNotFoundException('Utilisateur non trouvé');
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function refreshUser(UserInterface $user): UserInterface
|
||||
{
|
||||
// Permet de rafraîchir les données d'un utilisateur (pas toujours nécessaire)
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function supportsClass(string $class): bool
|
||||
{
|
||||
return Participant::class === $class;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user