Search code examples
http-redirectsymfonyauthenticationreferer

How to go back to referer after login failure?


For login success there is a parameter use_referer: true. For login failure there is only failure_path, which isn't what I'm looking for.

Second thing: How to do that and pass error message?

Third thing: How to go back to referrer after logout?


Solution

  • I solved it.

    There is solution: How to disable redirection after login_check in Symfony 2

    and here is code which solves my problem:

    <?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);
        }
    }
    

    to handle events add to security.yml for example:

    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 
    

    and to config.yml:

    services:
        authentication_handler:
            class: Acme\MainBundle\Handler\AuthenticationHandler