ajout des Roles + access denied, remplacement du Modal Compte par une vu et un controlleur appeler en AJAX directement dans Index, mise en place du Update pour les utilisateurs, optimisation de certaine partis
67 lines
2.5 KiB
PHP
67 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Security;
|
|
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
|
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
|
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
|
|
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
|
|
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
|
|
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
|
|
use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
|
|
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
|
|
use Symfony\Component\Security\Http\SecurityRequestAttributes;
|
|
use Symfony\Component\Security\Http\Util\TargetPathTrait;
|
|
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
|
|
|
|
|
class LoginAuthenticator extends AbstractLoginFormAuthenticator
|
|
{
|
|
use TargetPathTrait;
|
|
|
|
public const LOGIN_ROUTE = 'app_login';
|
|
|
|
public function __construct(private UrlGeneratorInterface $urlGenerator)
|
|
{
|
|
}
|
|
|
|
public function authenticate(Request $request): Passport
|
|
{
|
|
$mail = $request->getPayload()->getString('UserIdentifier');
|
|
|
|
$request->getSession()->set(SecurityRequestAttributes::LAST_USERNAME, $mail);
|
|
|
|
return new Passport(
|
|
new UserBadge($mail),
|
|
new PasswordCredentials($request->getPayload()->getString('Password')),
|
|
[
|
|
new CsrfTokenBadge('authenticate', $request->getPayload()->getString('_csrf_token')),
|
|
new RememberMeBadge(),
|
|
]
|
|
);
|
|
}
|
|
|
|
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
|
|
{
|
|
if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) {
|
|
return new RedirectResponse($targetPath);
|
|
}
|
|
|
|
// For example:
|
|
return new RedirectResponse($this->urlGenerator->generate('app_index'));
|
|
}
|
|
|
|
public function start(Request $request, ?AuthenticationException $authException = null): RedirectResponse
|
|
{
|
|
return new RedirectResponse($this->urlGenerator->generate('app_access_denied'));
|
|
}
|
|
|
|
protected function getLoginUrl(Request $request): string
|
|
{
|
|
return $this->urlGenerator->generate(self::LOGIN_ROUTE);
|
|
}
|
|
}
|