Limita o reindirizza gli utenti registrati dalla pagina di accesso

Sto usando Symfony 2.7, installato FOSuserbundle, tutto funziona perfettamente. I miei utenti vengono creati e posso accedere con loro, ma gli utenti registrati possono accedere alla pagina di accesso, che non mi sembra logica. Ho cercato un po 'di risposte e ho scoperto che devo configurare il mio file security.yml, ma ancora non funziona, chiunque può accedere alla pagina di accesso.

Ho scoperto che devo impostare

- { path: ^/, role: ROLE_USER} 

ma questo mi dà un ciclo di reindirizzamento.

Ecco cosa ho in esso

  firewalls: # disables authentication for assets and the profiler, adapt it according to your needs dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: pattern: ^/ form_login: provider: fos_userbundle csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4 logout: true anonymous: true # activate different ways to authenticate # http_basic: ~ # http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate # form_login: ~ # http://symfony.com/doc/current/cookbook/security/form_login_setup.html access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/profile, role: ROLE_USER } - { path: ^/admin/, role: ROLE_ADMIN } 

Sovrascrivere l'accessoAzione di tge SecurityController, in questo modo:

 class SecurityController extends BaseSecurityController { public function loginAction(Request $request) { if( $this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') { return $this->redirect($this->generateUrl('any_route_you_want')) } return parent::loginAction($request); } } 

Modifica : per sapere come sovrascrivere qualsiasi parte di un pacchetto, ciò sarebbe utile

Hai già provato questa soluzione? FOSUserBundle reindirizza dalla pagina di accesso dopo aver effettuato l'accesso

PHP:

È ansible sovrascrivere FOSUserBundle \ Controller \ SecurityController e aggiungere il seguente codice all'inizio di loginAction.

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

YAML:

La soluzione più semplice è aggiungere queste due linee alla tua app / config / security.yml:

always_use_default_target_path e default_target_path, ad esempio:

 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/