flosy.info | Développement Web, Open source …

TAG | Développement

Le but recherché est ici d’écrire une trace lors de la déconnexion de l’utilisateur.

L’une des solutions est de passer par un service qui sera appelé par le LogoutListener.

Souscription à l’évènement LogoutSuccess

Pour savoir comment gérer cela référons-nous à la documentation sur la configuration de la sécurité (http://symfony.com/doc/current/reference/configuration/security.html ).

Le firewall permet de préciser un service qui sera appelé en cas de succès de la déconnexion.


logout:
  path:   /logout
  target: /
  success_handler: flosy.user.logout.handler

Création du service

Il nous reste maintenant à créer ce service.
Pour cela créons le fichier LogoutHandler.php

< ?php
namespace Flosy\Bundle\UserBundle\Handler;
 
use Flosy\Bundle\CommonBundle\Model\EventLogManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
 
/**
 * Ce Handler permet de gérer des actions lors de la déconnexion de l'utilisateur.
 */
class LogoutHandler implements LogoutSuccessHandlerInterface {
 
    protected $elm;
 
    public function __construct(EventLogManager $elm)
    {
        $this->elm = $elm;
    }
 
    /**
     * Opération réalisées suite à la deconnexion.
     * 
     * @param \Symfony\Component\HttpFoundation\Request $request
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function onLogoutSuccess(Request $request)
    {
        $this->elm->add('Log de deconnexion');
 
        $response = new RedirectResponse($request->headers->get('referer'));
        return $response;
    }
}

La classe doit implémenter l’interface LogoutSuccessHandlerInterface et plus particulièrement la méthode onLogoutSuccess qui sera appelée par le LogoutListener.
Pour l’écriture nous faisons appel à un autre service que nous ne détaillerons pas ici.

Déclaration du service

Il nous reste à déclarer le service.
Nous éditons pour cela le fichier services.xml de notre bundle.

< ?xml version="1.0" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
 
    <services>
        <service id="flosy.user.logout.handler" class="Flosy\Bundle\UserBundle\Handler\LogoutHandler">
            <argument type="service" id="flosy.common.eventlog.manager"></argument>
        </service>
    </services>
</container>

Maintenant à chaque déconnexion un log sera écrit.

Webographie

L’article suivant traite de la gestion des redirections à la connexion et à la déconnexion à l’aide de ses services.

http://www.reecefowell.com/2011/10/26/redirecting-on-loginlogout-in-symfony2-using-loginhandlers/

Related Posts:

· ·

Theme Design by devolux.nh2.me