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 :

JWT : enregistrer les logs de connexion lorsque le jeton JWT est crée [3.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 93
    Par défaut JWT : enregistrer les logs de connexion lorsque le jeton JWT est crée
    Bonjour,

    Je me mets à symfony et test de créer une API d'authentification avec le bundle Lexik https://github.com/lexik/LexikJWTAuthenticationBundle.
    J'aimerais pouvoir enregistrer un journal des connexions en base de données.

    Pour cela j'utilise les listener mais ne sais pas comment "injecter" "Doctrine" pour pouvoir ajoouter des données en base.

    Voici le contenu de mon fichier service.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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    # Learn more about services, parameters and containers at
    # http://symfony.com/doc/current/book/service_container.html
    parameters:
    #    parameter_name: value
     
    services:
    #    service_name:
    #        class: AppBundle\Directory\ClassName
    #        arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
        markdown:
            class: AppBundle\Utils\Markdown
     
        app.twig.app_extension:
            class:     AppBundle\Twig\AppExtension
            arguments: ['@markdown']
            public:    false
            tags:
                - { name: twig.extension }
     
        # Evénements JWT
        app.event.jwt_created_listener:
            class: AppBundle\EventListener\JWTCreatedListener
            tags:
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_created, method: onJWTCreated }
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_created, method: onJWTCreated2 }
     
        app.event.jwt_decoded_listener:
            class: AppBundle\EventListener\JWTDecodedListener
            tags:
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_decoded, method: onJWTDecoded }
     
        app.event.jwt_authenticated_listener:
            class: AppBundle\EventListener\JWTAuthenticatedListener
            tags:
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_authenticated, method: onJWTAuthenticated }
     
        app.event.authentication_success_listener:
            class: AppBundle\EventListener\AuthenticationSuccessListener
            tags:
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_authentication_success, method: onAuthenticationSuccessResponse }
     
        app.event.authentication_failure_listener:
            class: AppBundle\EventListener\AuthenticationFailureListener
            tags:
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_authentication_failure, method: onAuthenticationFailureResponse }
     
        app.event.jwt_invalid_listener:
            class: AppBundle\EventListener\JWTInvalidListener
            tags:
                - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_invalid, method: onJWTInvalid }
    Et mon listener exécuté à la création du jeton :

    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
    52
    53
    54
    55
    56
     
    <?php
    /**
     * Created by PhpStorm.
     * User: alexandre
     * Date: 17/04/2016
     * Time: 13:35
     */
     
    namespace AppBundle\EventListener;
     
    use AppBundle\Entity\ConnectionLog;
    use AppBundle\Entity\User;
    use Doctrine\ORM\EntityManager;
    use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
     
    /**
     * Class JWTCreatedListener
     * By default the JWT payload will contain the username and the token TTL, but you can add your own data.
     *
     * Donnée du payload
     * 
     * @package AppBundle\EventListener
     */
    class JWTCreatedListener
    {
     
        /**
         * @param JWTCreatedEvent $event
         *
         * @return void
         */
        public function onJWTCreated(JWTCreatedEvent $event)
        {
            if (!($request = $event->getRequest())) {
                return;
            }
     
            $user = $event->getUser();
            if (!$user instanceof User) {
                return;
            }
            /// Récupération de l'id de l'application d'où vient la demande
            $software_id = $request->request->get('software_id') ?? null;
     
            $payload       = $event->getData();
            $payload['ip'] = $request->getClientIp();
            $payload['user_ip'] = $user->getIp();
            $payload['user_is_admin'] = $user->getIsAdmin();
            $payload['user_softwares'] = $user->getSerializeSoftwares();
            $payload['software_id'] = $software_id;
     
            $event->setData($payload);
        }
     
    }

    L'entité me permettant d'enregistrer les logs en base est nommé : ConnectionLog.

    Merci de votre aide.

  2. #2
    Membre extrêmement actif
    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
    Par défaut
    en Sf2, je ferai comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        app.event.jwt_............:
            class: AppBundle\EventListener\................
            arguments: [" @doctrine.orm.entity_manager"]                             //  dans le constructeur
            tags:
                - { .................. }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class ...............
    {
     
            public function __construct(\Doctrine\ORM\EntityManager $em) {

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 93
    Par défaut
    Merci dukoid,

    Par contre j'ai mis ça dans le constructeur et j'ai ajouter une variable de classe pur l'entity manager.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function __construct(\Doctrine\ORM\EntityManager $em)
        {
            $this->em = $em;
        }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/06/2012, 13h48
  2. enregistrer les Credentials de connexion
    Par charouel dans le forum Windows Forms
    Réponses: 0
    Dernier message: 23/02/2010, 12h58
  3. Enregistrer les logs dans plusieurs dossiers
    Par Guillaume.G dans le forum Apache
    Réponses: 1
    Dernier message: 15/07/2008, 11h28
  4. [DBCP]Activer les logs du pool de connexion
    Par miloux32 dans le forum JDBC
    Réponses: 1
    Dernier message: 04/01/2007, 12h42
  5. Enregistrer les informations de connexion client RDP
    Par genialk2000 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 31/01/2006, 17h24

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