tutorial instalar español symfony

instalar - symfony español



¿Cómo redirecciona symfony2 a la página solicitada después de iniciar sesión? (4)

La solución de Carrie Kendall funcionó, gracias!

Aquí está la implementación completa en Symfony:

services.yml:

login_handler: class: Project/BaseBundle/Service/loginHandler arguments: [''@router'', ''@doctrine.orm.entity_manager'', ''@service_container'']

y en Project / BaseBundle / Service / loginHandler:

namespace Project/BaseBundle/Service; use Symfony/Component/HttpFoundation/Request; use Symfony/Component/HttpFoundation/RedirectResponse; use Symfony/Component/Security/Core/Authentication/Token/TokenInterface; use Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface; use Symfony/Component/Routing/RouterInterface; use Doctrine/ORM/EntityManager; class loginHandler implements AuthenticationSuccessHandlerInterface { private $router; private $container; private static $key; public function __construct(RouterInterface $router, EntityManager $em, $container) { self::$key = ''_security.secured_area.target_path''; $this->router = $router; $this->em = $em; $this->session = $container->get(''session''); } public function onAuthenticationSuccess( Request $request, TokenInterface $token ) { $user_entity = $token->getUser(); if( !$user_entity->getChangePassword() ) { $route = $this->router->generate(''BaseBundle_home_page''); } else { $this->session->getFlashBag()->add(''error'', ''Your password must be changed now''); $route = $this->router->generate(''BaseBundle_account_page''); } //check if the referer session key has been set if ($this->session->has( self::$key )) { //set the url based on the link they were trying to access before being authenticated $route = $this->session->get( self::$key ); //remove the session key $this->session->remove( self::$key ); //if the referer key was never set, redirect to a default route } else{ $url = $this->generateUrl(''BaseBundle_home_page''); return new RedirectResponse($route); } return new RedirectResponse($route); } }

Digamos que mi ruta /booking/(.*) está protegida por una configuración de firewall en security.yml y requiere " ROLE_USER ", cuando el usuario intenta acceder a cualquier ruta que esté precedida por " / booking / " la aplicación redirige al usuario para que inicie sesión Página de autenticación.

Entonces, mi pregunta es: después de que el usuario proporciona sus credenciales y se autentica, ¿cómo puede Symfony 2 redirigir al usuario a la página / ruta que el usuario había solicitado O, donde Symfony 2 almacena esa ruta , la almacena en alguna sesión o en algún otro lugar.

¿Podemos acceder y cómo?


Symfony usa el encabezado HTTP Referer para redirigir a un usuario de nuevo a la página de la que vino ... es decir, la referencia

Puede configurarlo usando la configuración de seguridad use_referer: true en security.yml, detalles aquí

Puede acceder al encabezado de referencia desde un controlador usando lo siguiente:

$referer = $request->headers->get(''referer'');

Tenga en cuenta que el encabezado está mal escrito, su referente (una r)


Yo tuve este problema también. Utilicé security.yml y en la acción de registro utilizada:

$redirectUrl = $request->getSession()->get(''_security.account.target_path'');

disfrutar.


Esto es posible y puede acceder al enlace de referencia (que se usa si use_referer se establece en true ) en la sesión.

Por ejemplo, si tiene un servicio success_handler en su form_login (en su configuración de firewall) que redirige a los usuarios según algunos criterios (generalmente roles) pero desea redirigir al usuario al enlace de referencia, si se configuró , podría acceder al enlace de referencia al igual que:

$key = ''_security.main.target_path''; #where "main" is your firewall name //check if the referrer session key has been set if ($this->container->get(''session'')->has($key)) { //set the url based on the link they were trying to access before being authenticated $url = $this->container->get(''session'')->get($key); //remove the session key $this->container->get(''session'')->remove($key); } //if the referrer key was never set, redirect to a default route else{ $url = $this->router->generate(''member_home''); } return new RedirectResponse($url);

El uso del encabezado para obtener el remitente (es decir, $request->headers->get(''referer'') ) no funcionará en este caso porque siempre devolverá el enlace de inicio de sesión.

Gracias a Roman Marintsenko y Ryan Weaver por este blog