2015-08-21 4 views
0

Я использую Symfony 2.7, установленный FOSuserbundle, все работает нормально. Мои пользователи создаются, и я могу войти с ними, но зарегистрированные пользователи могут ввести страницу входа в систему, что для меня не кажется логичным. Я немного искал ответы и выяснил, что мне нужно настроить файл security.yml, но он все равно не работает, каждый может войти на страницу входа.Ограничение или переадресация вошедших в систему пользователей со страницы входа

я обнаружил, что я должен установить

- { path: ^/, role: ROLE_USER} 

, но это дает мне цикл перенаправления.

Вот то, что я в нем

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 } 

ответ

1

Override в loginAction из Tge SecurityController, таким образом:

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

Edit: Для того, чтобы узнать, как переопределить любую часть комплекта, this было бы полезно

+0

Still не работает, я снова получаю сообщение «Эта веб-страница имеет цикл перенаправления». –

+0

, к какому маршруту вы перенаправляете уже зарегистрированного пользователя ?! –

+0

SecurityController делает вернуть $ this-> renderLogin (массив ( 'last_username' => $ lastUsername, 'ошибка' => $ ошибка, 'csrf_token' => $ csrfToken, )); и я возвращаю $ this-> redirect ($ this-> generateUrl ('main_page')) в моем переопределенном классе, который является маршрутом '/'. –

0

Все уже опробовано это решение? FOSUserBundle redirect from login page after logged in

PHP:

Вы можете переопределить FOSUserBundle \ Controller \ SecurityController и добавьте следующий код в верхней части 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:

Чем проще решение добавить эти две строки в приложение/Config/security.yml:

always_use_default_target_path & default_target_path, например:

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/ 
+0

Все еще получаю цикл перенаправления. Это также кажется довольно старым для версии 2.4. –

Смежные вопросы