Pour réussir la connexion, il existe un paramètre use_referer: true
. Pour l'échec de la connexion, il n'y a que failure_path
, ce qui n'est pas ce que je recherche.
Deuxième chose: comment faire et passer un message d'erreur?
Troisième chose: comment revenir au référent après la déconnexion?
Je l'ai résolu.
Il existe une solution: Comment désactiver la redirection après login_check dans Symfony 2
et voici le code qui résout mon problème:
<?php
namespace Acme\MainBundle\Handler;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
class AuthenticationHandler implements AuthenticationFailureHandlerInterface, LogoutSuccessHandlerInterface
{
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
$referer = $request->headers->get('referer');
$request->getSession()->setFlash('error', $exception->getMessage());
return new RedirectResponse($referer);
}
public function onLogoutSuccess(Request $request)
{
$referer = $request->headers->get('referer');
return new RedirectResponse($referer);
}
}
pour gérer les événements, ajoutez à security.yml par exemple:
form_login:
check_path: /access/login_check
login_path: /
use_referer: true
failure_handler: authentication_handler
logout:
path: /access/logout
target: /
success_handler: authentication_handler
et à config.yml:
services:
authentication_handler:
class: Acme\MainBundle\Handler\AuthenticationHandler