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 :
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 # 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 }
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.
Partager