le but est de pouvoir rediriger ou l'on veut après un login ou un logout.

avec le login ça fonctionne, je suis bien redirigé là ou je veux par contre avec le logout, rien ne se passe.(je me retrouve toujours à la page d'acceuil)


le service acme_logout_success_handler est bien actif (app/console container:debug)

je ne sais pas pourquoi lorsque je me déconnecte il ne va pas dans : onLogoutSuccess(Request $request)
ni même dans la classe : LogoutSuccessHandler


app/config.yml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
services:
...
 
    acme_login_success_handler:
        class:  Acme\UserBundle\Component\Authentication\Handler\LoginSuccessHandler
        arguments:  [@router, @security.context]
        tags:
            - { name: 'monolog.logger', channel: 'security' } 
    acme_logout_success_handler:
        class:  Acme\UserBundle\Component\Authentication\Handler\LogoutSuccessHandler
        arguments:  [@service_container, @router]
        tags:
            - { name: 'monolog.logger', channel: 'security' }

security.yml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
...
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
 
        # Firewall principal pour le reste de notre site
        main:
            #pattern:    .*
            form_login:
                provider:       fos_userbundle
                login_path:     /login
                use_forward:    false
                check_path:     /login_check
                success_handler: acme_login_success_handler
                failure_path:   null           
            logout:
                path:   /logout
                target: /
                success_handler: acme_logout_success_handler
            anonymous:  true     
 
            remember_me:
                key:         %secret%        # On définit la clé pour le remember_me (%secret% est un parametre de parameters.ini)
            anonymous:       true            # On autorise les utilisateurs anonymes (non identifiés)
            logout:          true     # On autorise la déconnexion manuelle (désactivé par défaut)

Acme\UserBundle\Component\Authentication\Handler\LoginSuccessHandler.pchp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
<?php
namespace Acme\UserBundle\Component\Authentication\Handler;
 
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;
 
class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{
 
    protected $router;
    protected $security;
 
    public function __construct(Router $router, SecurityContext $security)
    {
        $this->router = $router;
        $this->security = $security;
    }
 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        if ($this->security->isGranted('ROLE_SUPER_ADMIN'))
        {
            $response = new RedirectResponse($this->router->generate('category_index'));            
        }
        elseif ($this->security->isGranted('ROLE_ADMIN'))
        {
            $response = new RedirectResponse($this->router->generate('category_index'));
        } 
        elseif ($this->security->isGranted('ROLE_USER'))
        {
            // redirect the user to where they were before the login process begun.
            $referer_url = $request->headers->get('referer');
 
            $response = new RedirectResponse($referer_url);
        }  
 
        return $response;
    }
 
}

Acme\UserBundle\Component\Authentication\Handler\LogoutSuccessHandler.pchp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<?php
 
namespace Acme\UserBundle\Component\Authentication\Handler;
 
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
 
class LogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
 
    protected $router;
 
    public function __construct(Router $router)
    {
        $this->router = $router;
    }
 
    public function onLogoutSuccess(Request $request)
    {
 
$response =   new RedirectResponse($this->router->generate( 'acme_ztest' ));
return  $response;
    }
 
}