yml traditional symfony3 login_check form error authentication_utils php symfony

php - traditional - symfony error login



redirigir después de iniciar sesión paquete de usuario fos Symfony (2)

Debe agregar un LoginSuccessHandler que implemente la interfaz AuthenticationSuccessHandler,

Luego puede establecer su lógica de redirección dentro del método onAuthenticationSuccess() como sigue,

namespace XXX/YourBundler/Handler; use Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface; use Symfony/Component/Security/Core/Authentication/Token/TokenInterface; use Symfony/Component/Security/Core/SecurityContext; use Symfony/Component/HttpFoundation/Request; use Symfony/Component/HttpFoundation/RedirectResponse; use Symfony/Component/Routing/Router; class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface { protected $router; protected $security; public function __construct(Router $router, SecurityContext $security) { $this->router = $router; $this->security = $security; } public function onAuthenticationSuccess(Request $request, TokenInterface $token) { if ($this->security->isGranted(''ROLE_XXXX_1'')) { $response = new RedirectResponse($this->router->generate(''route_1'')); } elseif ($this->security->isGranted(''ROLE_XXXX_2'')) { $response = new RedirectResponse($this->router->generate(''route_2'')); } // ... } }

Su controlador también debe estar registrado como un servicio,

parameters: security.authentication.success_handler.class: XXX/YourBundler/Handler/AuthenticationSuccessHandler services: security.authentication.customized_success_handler: class: %security.authentication.success_handler.class% public: false arguments: [@router, @security.context]

A continuación, debe agregar la siguiente línea a la configuración de seguridad del firewall,

success_handler: security.authentication.customized_success_handler

Tengo un paquete que amplía el paquete de usuario de fos y otro paquete.
Quiero una vez que un usuario sea autenticado para redirigirlo según su administrador de funciones o usuario simple a diferentes vistas.
Mi problema es que no puedo encontrar el controlador del inicio de sesión desde donde haré el redireccionamiento.

El rol es un atributo de la entidad User que proviene de la base de datos.


Puede sobreescribir la función renderLogin de la siguiente manera:

class SecurityController extends BaseController { /** * Renders the login template with the given parameters. Overwrite this function in * an extended controller to provide additional data for the login template. * * @param array $data * * @return /Symfony/Component/HttpFoundation/Response */ protected function renderLogin(array $data) { $securityContext = $this->get(''security.context''); $router = $this->container->get(''router''); // if ($this->get(''security.context'')->getToken()->getUser() instanceof /FOS/UserBundle/Propel/User) { // $url = $this->container->get(''router'')->generate(''dashboard''); // return new RedirectResponse($url); // } if ($securityContext->isGranted(''ROLE_ADMIN'')) { return new RedirectResponse($router->generate(''dashboard''), 307); } if ($securityContext->isGranted(''ROLE_USER'')) { return new RedirectResponse($router->generate(''front_page_home''), 307); } $requestAttributes = $this->container->get(''request'')->attributes; if ($requestAttributes->get(''_route'') == ''admin_fos_user_security_login'') { $template = sprintf(''FOSUserBundle:Security:login.html.twig''); $data[''admin''] = true; } else { $template = sprintf(''FOSUserBundle:Security:login.html.twig''); $data[''admin''] = false; } return $this->container->get(''templating'')->renderResponse($template, $data); } }