the symfony2 node must fosuser fos_user fos db_driver configured child symfony fosuserbundle

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); } }