IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Authentification] redirection après un logout [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut [Authentification] redirection après un logout
    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;
        }
     
    }

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    j'ai trouvé, apparemment il faut supprimer la ligne :

    config.yml
    ni meme le mettre à false, ce que j'avais fais au début .
    faut carrément supprimer cette ligne sinon ça bloque.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Ben en fin de compte, c'est formateur non ? parce que effectivement en écrivant deux fois, logout: tu déclares ton firewall deux fois, et symfony au deuxième écrase le premier. inverse l'ordre tu verras que ça doit continuer à fonctionner.

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    cela ne m'a pas sauté aux yeux au début qu'il y avait 2 X le logout défini.

    le chemin est encore long... avant de devenir un expert sf2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection apres authentification
    Par nander dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/03/2011, 20h20
  2. Liferay redirection après logout
    Par lenabil dans le forum Développement Web en Java
    Réponses: 9
    Dernier message: 31/05/2010, 17h21
  3. Redirection apres authentification
    Par roronnoa dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 26/11/2008, 11h18
  4. Réponses: 9
    Dernier message: 25/06/2008, 13h40
  5. [JBoss Portal] Redirection apres logout
    Par S.led dans le forum Portails
    Réponses: 2
    Dernier message: 29/11/2007, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo