Symfony 2 & FosuserBundle: authentifier l'utilisateur après la réinitialisation du mot de passe

StackOverflow https://stackoverflow.com//questions/10701949

Question

Lorsque le contrôleur de mot de passe de réinitialisation de FosuserBundle remplace, il existe une méthode d'appel de la fonction "authentificateur" (ligne 104):

https://github.com/friendsofsymfony/foSuserBundle/blob / maître / contrôleur / réinitialisationController.php # l104

....
$this->authenticateUser($user);
....

Mon problème est que je remplace déjà le gestionnaire d'authentification Symfony et que j'ai mon propre logique lorsqu'un utilisateur se connecte.

Modifier Voici mon gestionnaire d'authentification:

<?php

/* ... all includes ... */

class AuthenticationHandler implements AuthenticationSuccessHandlerInterface, LogoutSuccessHandlerInterface
{
    private $router;
    private $container;

    public function __construct(Router $router, ContainerInterface $container)
    {
        $this->router = $router;
        $this->container = $container;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        // retrieve user and session id
        $user = $token->getUser();

        /* ... here I do things in database when logging in, and dont want to write it again and again ... */

        // prepare redirection URL
        if($targetPath = $request->getSession()->get('_security.target_path')) {
            $url = $targetPath;
        }
        else {
            $url = $this->router->generate('my_route');
        }

        return new RedirectResponse($url);
    }

}

Ainsi, comment puis-je appeler la méthode "OnaTuthentiCessUCCESS" de mon gestionnaire d'authentification dans la réinitialisation de la réinitialisation? Afin d'éviter de réécrire le même code ...

Merci pour votre aide!

Aurel

Était-ce utile?

La solution

Vous devez appeler votre méthode OnAuthentiCessUCCESSCESSE en chargement en tant que service.Dans votre config.yml:

authentication_handler:
    class: Acme\Bundle\Service\AuthenticationHandler
    arguments:
        container: "@service_container"

Ensuite, appelez-le dans la fonction authentifiétuser:

protected function authenticateUser(UserInterface $user) {
      try {
        $this->container->get('fos_user.user_checker')->checkPostAuth($user);
      } catch (AccountStatusException $e) {
          // Don't authenticate locked, disabled or expired users
          return;
      }

      $providerKey = $this->container->getParameter('fos_user.firewall_name');
      $token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
      $this->container->get('security.context')->setToken($token);
      $request = $this->container->get('request');
      $this->container->get('authentication_handler')->onAuthenticationSuccess($request, $token);
}

Cela fait l'affaire et passez à travers votre gestionnaire d'authentification personnalisé. Plus d'infos .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top