traditional form error authentication_utils symfony redirect login fosuserbundle

symfony - form - Redireccionar FOSUserBundle desde la página de inicio de sesión después de iniciar sesión



symfony error login (4)

La solución más fácil es agregar estas dos líneas a su aplicación / config / security.yml:

always_use_default_target_path & default_target_path , por ejemplo:

firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_provider: form.csrf_provider login_path: /login check_path: /login_check always_use_default_target_path: false default_target_path: /your/start/path/

Simplemente quiero que el usuario administrador o el usuario final intente acceder a la página de inicio de sesión incluso después de iniciar sesión

/admin/login (admin user)

O

/login (front end user)

luego deberían ser redirigidos a su página de inicio relacionada como /admin o /


Puede anular FOSUserBundle/Controller/SecurityController y agregar el siguiente código en la parte superior de loginAction .

use Symfony/Component/HttpFoundation/RedirectResponse; // ... public function loginAction(Request $request) { $authChecker = $this->container->get(''security.authorization_checker''); $router = $this->container->get(''router''); if ($authChecker->isGranted(''ROLE_ADMIN'')) { return new RedirectResponse($router->generate(''admin_home''), 307); } if ($authChecker->isGranted(''ROLE_USER'')) { return new RedirectResponse($router->generate(''user_home''), 307); } // ...


Simplemente redirija en el controlador de la página que agregó en default_target_path a la dirección deseada, por ejemplo, si coloca default_target_path: /index e index es una acción definida en HomePageCOntroller , vaya a HomePageCOntroller , pruebe si el usuario actual es admin o no con:

if (($this->container->get(''security.context'')->isGranted(''ROLE_ADMIN'')))

y luego redirigirlo al espacio de administración.


Redirigir al iniciar / cerrar sesión en Symfony2 usando LoginHandlers

Debe implementar AuthenticationSuccessHandlerInterface para manejar la decisión de último minuto cuando el éxito de inicio de sesión.

Implemente AuthenticationSuccessHandlerInterface:

<?php // AcmeBundle/Security/LoginSuccessHandler.php namespace AcmeBundle/Security; use Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface; use Symfony/Component/Security/Core/Authentication/Token/TokenInterface; use Symfony/Component/Security/Core/Authorization/AuthorizationChecker; use Symfony/Component/HttpFoundation/Request; use Symfony/Component/HttpFoundation/RedirectResponse; use Symfony/Component/Routing/Router; class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface { protected $router; protected $authorizationChecker; public function __construct(Router $router, AuthorizationChecker $authorizationChecker) { $this->router = $router; $this->authorizationChecker = $authorizationChecker; } public function onAuthenticationSuccess(Request $request, TokenInterface $token) { $response = null; if ($this->authorizationChecker->isGranted(''ROLE_ADMIN'')) { $response = new RedirectResponse($this->router->generate(''backend'')); } else if ($this->authorizationChecker->isGranted(''ROLE_USER'')) { $response = new RedirectResponse($this->router->generate(''frontend'')); } return $response; } }

Registra tu clase como un servicio:

# app/config/services.yml services: authentication.handler.login_success_handler: class: AcmeBundle/Security/LoginSuccessHandler arguments: [''@router'', ''@security.authorization_checker'']

Agregue una referencia a su clase LoginSuccessHandler en el firewall

# app/config/security.yml firewalls: main: pattern: ^/ form_login: success_handler: authentication.handler.login_success_handler