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 :

[FOSUserBundle] Effectuer des actions après connexion utilisateur


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut [FOSUserBundle] Effectuer des actions après connexion utilisateur
    Bonjour à tous,

    Je développe une application à base de symfony2 et j'ai mis en place le FOSUserBundle qui fonctionne bien.

    Je souhaiterais cependant personnaliser un point: explications

    L'utilisateur se trouve devant le formulaire de connexion
    Il saisit ses identifiants et valide le formulaire
    La connexion se fait bien, il est authentifié
    Une fois qu'il s'est identifié, je souhaiterais effectuer des actions diverses et variées.Par exemple :

    • stocker en session des informations complémentaires
    • mettre à jour une date de connexion
    • logger les connexions utilisateurs


    J'ai donc identifié une méthode loginCheck dans le FOSUB , mais impossible de la surcharger ( la surcharge fonctionne bien avec loginAction ...)

    Je ne vois pas du tout le moyen d'effectuer ce que je veux faire

    Il ne me reste donc qu'une seule solution : crier à l'aide

  2. #2
    Membre habitué
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Points : 169
    Points
    169
    Par défaut
    Bonjour, deux pistes à explorer : les listeners et monolog.

    Bonne lecture !

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Ok pour le lien vers les listeners. Ma question c'est comment tester si cela fonctionne. Je m'explique

    J'ai crée ceci dans mon McUserBundle

    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
    46
    47
    48
    49
    50
    51
    //src/Mc/UserBundle/Listener/LoginListener/LoginListener.php
    <?php
     
    namespace Mc\UserBundle\Listener;
     
    use Symfony\Component\EventDispatcher\Event;
    use Symfony\Component\Security\Core\SecurityContext;
    use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine; // for Symfony 2.1.x
    use Symfony\Component\HttpFoundation\Session\Session;
     
    // use Symfony\Bundle\DoctrineBundle\Registry as Doctrine; // for Symfony 2.0.x
     
    /**
     * Custom login listener.
     */
    class LoginListener
    {
     
      /** @var \Symfony\Component\Security\Core\SecurityContext */
      private $context;
     
      /** @var \Doctrine\ORM\EntityManager */
      private $em;
     
      /**
       * Constructor
       * 
       * @param SecurityContext $context
       * @param Doctrine        $doctrine
       */
      public function __construct( SecurityContext $context , Doctrine $doctrine )
      {
        $this->context = $context;
        $this->em      = $doctrine->getEntityManager();
      }
     
      /**
       * Do the magic.
       * 
       * @param  Event $event
       */
      public function onSecurityInteractiveLogin( Event $event )
      {
        $user = $this->context->getToken()->getUser();
     
        die('je veux que tu meures ici');
     
        // do all your magic here
      }
     
    }
    J'ai également ajouté ceci dans mon McUserbundle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    services:
        login_listener:
            class: Mc\UserBundle\Listener\LoginListener
            arguments: [@security.context, @doctrine]
            tags:
                - { name: kernel.event_listener, event: security.interactive_login }
    Et pourtant, rien ne se passe ...

    J'ai déja crée des listeners postUpdate et postLoad , mais la FOSUB me dépasse , du moins je n'arrive pas a en comprendre la véritable logique...

  4. #4
    Membre habitué
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Points : 169
    Points
    169
    Par défaut
    N'utilisant pas FOSUB, je ne peux pas t'assurer que cela fonctionne mais il suffit peut-être simplement de surcharger la classe Security/InteractiveLoginListener.

  5. #5
    Membre habitué
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Points : 169
    Points
    169
    Par défaut
    Avec les yeux en face des trous ça ira mieux.
    Quand tu tag ton service, il faut lui indiquer la méthode à utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    services:
        login_listener:
            class: Mc\UserBundle\Listener\LoginListener
            arguments: [@security.context, @doctrine]
            tags:
                - { name: kernel.event_listener, event: security.interactive_login, method: onSecurity:)LoginInteractive }
    Ensuite, tu as l'événement InteractiveLoginEvent qui existe, en l'utilisant, tu n'as plus besoin de passer le service security.context à ton listener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function onSecurityInteractiveLogin( InteractiveLoginEvent $event )
      {
        $user = $event->getAuthenticationToken()->getUser();
     
        die('je veux que tu meures ici');
     
        // do all your magic here
      }

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/10/2010, 17h47
  2. Réponses: 2
    Dernier message: 28/01/2008, 12h41
  3. Réponses: 11
    Dernier message: 17/03/2007, 20h17
  4. Enregistrement des actions de l'utilisateur
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 17h55
  5. [GNU Pascal] [GRX] Effectuer des actions pendant un temps d'arrêt (GRSleep)
    Par the_guitariste dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/04/2004, 18h21

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