Pregunta

Al anular el controlador de contraseña de restablecimiento de Fosuserbundle, existe una llamada a la llamada al método "autenticateuser" (línea 104):

https://github.com/friendsofsymfony/fosuserbundle/Blob / Master / Controlador / ReinicioController.php # L104

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

Mi problema es que ya anuleo el manejador de autenticación de Symfony y tengo mi propia lógica cuando un usuario inicia sesión.

editar Aquí está mi controlador de autenticación:

<?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);
    }

}

Entonces, ¿cómo podría llamar al método "Onauthenticationsccess" desde mi controlador de autenticación en el reinicioController? Para evitar reescribir el mismo código ...

¡Gracias por su ayuda!

Aurel

¿Fue útil?

Solución

Debe llamar a su método OnauthenticationsCess cargándolo como un servicio.En su config.yml:

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

y luego, llámalo en la función de autenticateuser:

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);
}

Este haga el truco y pase a través de su controlador de autenticación personalizado. Más información .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top