繁体   English   中英

从登录页面限制或重定向登录的用户

[英]Restrict or redirect logged in users from login page

我正在使用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 }

通过以下方式覆盖tge SecurityController的loginAction:

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

编辑 :要了解如何覆盖捆绑包的任何部分, 将有所帮助

已经尝试过此解决方案? 登录后从登录页面重定向FOSUserBundle

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:

较简单的解决方案是将这两行添加到您的app / 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM