Lo que sucede es que cuando agrego un nuevo usuario, una ves guardado este se loguea automáticamente,y no quiero eso.
en mi aplicación solo el usuario administrador puede agregar nuevos usuarios pero cuando creo uno nuevo, la sesión actual pasa a ser o a loguearse automáticamente con el nuevo usuario.
Agradezco a quien me pueda explicar como evitar eso, Gracias.
entre Desarrolladores
Recibe ayuda de expertos
Registrate y pregunta
Es gratis y fácil
Recibe respuestas
Respuestas, votos y comentarios
Vota y selecciona respuestas
Recibe puntos, vota y da la solución
Pregunta
¿Como evitar que en FOSuserbundle se realize autologin, cuando se agrega un nuevo usuario?
- preguntó
- Web
- 690 Vistas
- 1 Respuestas
- solucionada
1 Respuesta
Hola.
Si estás usando la versión 1.3 del bundle, solo tienes una forma sencilla de hacerlo, que es sobreescribiendo el comando de registro de FOSUserBundle para hacer lo que tú quieras.
Aquí tienes toda la información de cómo hacerlo: http://symfony.com/doc/master/bundles/FOSUserBundle/overriding_controllers.html
Básicamente consiste en crear un bundle que sea "hijo" de FOSUserBundle (ojo, no extendiendo la clase, si no con el mecanismo que establece Symfony, en el enlace que he puesto antes lo explican), en ese bundle crear un controller que se tiene que llamar igual que el de FOSUserBundle (RegistrationController), y en ese controller sobreescribir los comandos (action) que quieras, en este caso, registerAction, y ahí haces lo que quieras, puedes copiar el action del controlador de FOSUserBundle y quitar lo que no necesites. Este sería el código del action "original", y he comentado las partes que se deberían quitar:
public function registerAction()
{
$form = $this->container->get('fos_user.registration.form');
$formHandler = $this->container->get('fos_user.registration.form.handler');
$confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');
$process = $formHandler->process($confirmationEnabled);
if ($process) {
$user = $form->getData();
$authUser = false;
/*ESTO SE PUEDE QUITAR, NO QUIERES REDIRIGIR A NINGUN LADO DEPENDIENDO DE SI SE TIENE QUE CONFIRMAR POR MAIL O NO, PERO OJO, DEBES DEFINIR UNA VARIABLE $route CON LA RUTA DONDE QUIERES REDIRIGIR DESPUES DEL REGISTRO*/
/* if ($confirmationEnabled) {
$this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
$route = 'fos_user_registration_check_email';
} else {
$authUser = true;
$route = 'fos_user_registration_confirmed';
}
*/
$this->setFlash('fos_user_success', 'registration.flash.user_created');
$url = $this->container->get('router')->generate($route);
$response = new RedirectResponse($url);
/*ESTA ES LA PARTE QUE AUTENTICA AL USUARIO, LA QUITAMOS*/
/* if ($authUser) {
$this->authenticateUser($user, $response);
}*/
return $response;
}
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
'form' => $form->createView(),
));
}
Si estás usando la versión 2.0 del bundle, además de la opción anterior de sobreescribir el controller (aunque el código "original" del action cambia), tienes una opción más elegante. Primero, este sería el código del action en la versión 2.0, con las partes que deberías quitar comentadas:
public function registerAction(Request $request)
{
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
$formFactory = $this->get('fos_user.registration.form.factory');
/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
$userManager = $this->get('fos_user.user_manager');
/** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->get('event_dispatcher');
$user = $userManager->createUser();
$user->setEnabled(true);
$event = new GetResponseUserEvent($user, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
$form = $formFactory->createForm();
$form->setData($user);
$form->handleRequest($request);
if ($form->isValid()) {
$event = new FormEvent($form, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
$userManager->updateUser($user);
/** ESTO SE PUEDE QUITAR SI NO SE QUIERE REDIRIGIR A ESTA RUTA/ACTION EN CONCRETO **/
if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_registration_confirmed');
$response = new RedirectResponse($url);
}
/** ESTO ES LO QUE SE DEBE QUITAR PARA NO HACER AUTOLOGIN, PUES HAY UN LISTENER ESCUCHANDO ESTE EVENTO QUE ES EL QUE REALIZA EL AUTOLOGIN **/
/* $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));*/
return $response;
}
return $this->render('FOSUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));
}
Pero como decía, hay una solución más elegante, que te evita tener que crear un Bundle, controller, actions, y sigues usando el código original sin tocarlo. Como comento en el código, es un Listener (en realidad un Subscriber) escuchando el evento REGISTRATION_COMPLETED el que provoca el autologin, por lo que podemos hacer es crear nuestro propio Listener, y hacer que ese Listener detenga la propagación del evento, para que no se ejecute nunca el Listener de FOSUserBundle. Se haría así:
<?php
namespace AppBundle;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class AuthListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_COMPLETED => 'registration',
FOSUserEvents::REGISTRATION_CONFIRMED => 'registration'
);
}
public function registration(FilterUserResponseEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null)
{
//SI QUIERES PUEDES HACER MÁS COSAS AQUÍ
$event->stopPropagation();
}
}
Para registrar este Listener/Subscriber, en el archivo de definición de servicios services.yml, incluyes esta entrada:
services:
auth_listener:
class: AppBundle\AuthListener
tags:
- {name: kernel.event_subscriber}
Además, si tampoco quieres que se redirija al action confirmed después del registro, puedes añadir el evento FOSUserEvents::REGISTRATION_SUCCESS a la lista de eventos que nuestro subscriber escucha, y ahí crear un response con la respuesta que quieras.
Espero que haya quedado claro, si no, pregunta las dudas.
Saludos
Por favor, accede o regístrate para añadir un comentario.
Por favor, accede o regístrate para responder a esta pregunta.
En el blog
-
- 690161
- 1
- Jul 5, 2015
Sin Respuesta
-
- 107
- 0
- Oct 18
-
- 173
- 0
- Jul 9
-
- 566
- 1
- Mar 19
-
- 444
- 2
- Feb 26
-
- 4961
- 0
- Nov 7, 2023
-
- 488
- 0
- Sep 19, 2023
-
- 480
- 0
- Ago 21, 2023
-
- 645
- 0
- May 14, 2023
- ver todas
Preguntas relacionadas
- Problema con FOSUserBundle Groups, ¿Cómo añadir campos adicionales a la tabla relacional entre User y Groups?
- Evitar que twig interprete las llaves {{ }} en algunos casos
- Como guardo los registros que un usuario hizo cuando se logueo?
- como se usan los metodos en las vistas de twig
- Como evitar que un usuario pueda cerrar una applicacion en OSX?
Actividad Reciente
alyvrs preguntó Oct 19
Ayuda , necesito mostrar datos creados solo por el…ManHol preguntó Jul 9
pasar un archivo de excel a csv en pythonArtEze respondió Abr 24
Alguien sabe, no me ignorenArtEze seleccionó una respuesta Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze preguntó Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
No me deja instalar OracleArtEze respondió Abr 24
Formulario que guarde los datos de un jsonArtEze comentó Abr 24
Script /boot/ scrapingSantiago2610 comentó Mar 23
Acualizar ChoiceField en django
Ultimas Preguntas
Preguntas relacionadas
- Problema con FOSUserBundle Groups, ¿Cómo añadir campos adicionales a la tabla relacional entre User y Groups?
- Evitar que twig interprete las llaves {{ }} en algunos casos
- Como guardo los registros que un usuario hizo cuando se logueo?
- como se usan los metodos en las vistas de twig
- Como evitar que un usuario pueda cerrar una applicacion en OSX?
Usuarios Top
- Leonardo-Tadei
- 227320 Puntos
- Peter
- 150480 Puntos
- white
- 75880 Puntos
- carlossevi
- 63580 Puntos
- magarzon
- 30650 Puntos
- pregunton
- 20400 Puntos