symfony2 - Cómo deshabilitar definitivamente el registro en FOSUserBundle
symfony hash (6)
Así es como resuelvo este problema ...
Primero debe definir su oyente en el archivo services.yml:
services:
registrationListner:
class: App/YourBundle/Listener/RegistrationListener
arguments: [@service_container]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest}
Luego crea tu clase RegistrationListener:
<?php
namespace App/YourBundle/Listener;
use Symfony/Component/DependencyInjection/ContainerInterface;
use Symfony/Component/HttpFoundation/RedirectResponse;
use Symfony/Component/HttpKernel/Event/GetResponseEvent;
class RegistrationListener
{
private $router;
public function __construct(ContainerInterface $container){
$this->router = $container->get(''router'');
}
public function onKernelRequest(GetResponseEvent $event)
{
$route = $event->getRequest()->attributes->get(''_route'');
if ($route == ''fos_user_registration_register'') {
//here we''re gonna to redirect to you_route for example, I guess in the most cases it will be the index...
$event->setResponse(new RedirectResponse($this->router->generate(''your_route'')));
}
}
}
Espero eso ayude.
En mi proyecto, permito que solo un usuario administre el contenido del sitio web. Este usuario se agregará usando la línea de comando al principio.
Ahora, quiero que la acción de registro sea inaccesible y no sé cómo? Hasta ahora, simplemente coloqué el ROLE_ADMIN en el control de acceso para el registro de ruta para evitar que los visitantes puedan arrojarlo.
¿Algun consejo?
Otra solución simple (la que yo usé) es sobrescribir el método de controlador FOSUserBundle
predeterminado de registerAction()
:
namespace Acme/UserBundle/Controller;
use FOS/UserBundle/Controller/RegistrationController as FOSRegistrationController;
use Symfony/Component/HttpFoundation/Request;
class RegistrationController extends FOSRegistrationController
{
public function registerAction(Request $request)
{
return $this->redirectToRoute(''getStarted'', array(), 301);
}
}
Al hacer esto, se dejarán activas otras rutas, como la página de confirmación.
Simplemente sobrescribí la acción de registro y redirigí al usuario a mi primera página de registro (getStarted).
Solo puede cambiar la aplicación / config / security.yml:
- { path: ^/register, role: ROLE_ADMIN }
Cambie del valor predeterminado (IS_AUTHENTICATED_ANONYMOUSLY) a ROLE_ADMIN y dejará de permitir que los usuarios anónimos lleguen al formulario / register.
Eche un vistazo a la configuración de enrutamiento importada de
proveedor / friendsofsymfony / user-bundle / Resources / config / routing / all.xml
Si solo desea las acciones de seguridad básicas, solo importe
@ FOSUserBundle / Resources / config / routing / security.xml
en lugar de
@ FOSUserBundle / Resources / config / routing / all.xml
De esta forma, puede simplemente seleccionar qué componentes (seguridad, perfil, reinicio, contraseña de cambio) desea usar o eventos importan solo rutas específicas de esos componentes.
Si usa JMSSecurityExtraBundle, puede usar la directiva denyAll
la denyAll
manera:
- { path: ^/register, access: denyAll }
Hay muchas formas de resolver este problema. Simplemente puede eliminar la ruta fos_user_registration_register de routing.yml. O use una solución más complicada: configure el detector de eventos en el evento FOS / UserBundle / FOSUserEvents :: REGISTRATION_INITIALIZE y redirija al usuario a la página de inicio de sesión.
services.xml
<service id="app.registration.listener" class="AppBundle/EventListener/RegistrationListener">
<tag name="kernel.event_subscriber" />
<argument type="service" id="router" />
</service>
RegistrationListener.php
<?php
namespace AppBundle/EventListener;
use FOS/UserBundle/Event/GetResponseUserEvent;
use FOS/UserBundle/FOSUserEvents;
use Symfony/Component/EventDispatcher/EventSubscriberInterface;
use Symfony/Component/HttpFoundation/RedirectResponse;
use Symfony/Component/Routing/Generator/UrlGeneratorInterface;
class RegistrationListener implements EventSubscriberInterface
{
/**
* @var UrlGeneratorInterface
*/
private $router;
/**
* @param UrlGeneratorInterface $router
*/
public function __construct(UrlGeneratorInterface $router) {
$this->router = $router;
}
public static function getSubscribedEvents()
{
return [
FOSUserEvents::REGISTRATION_INITIALIZE => ''onRegistrationInitialize'',
];
}
public function onRegistrationInitialize(GetResponseUserEvent $event)
{
$url = $this->router->generate(''fos_user_security_login'');
$response = new RedirectResponse($url);
$event->setResponse($response);
}
}