Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect 如何重定向已记住的用户?_Redirect_Symfony_Login_Remember Me - Fatal编程技术网

Redirect 如何重定向已记住的用户?

Redirect 如何重定向已记住的用户?,redirect,symfony,login,remember-me,Redirect,Symfony,Login,Remember Me,我正在用symfony2.2开发一个网站。我使用FOSUserBundle,我的网站基本上由主页、登录页面、注册页面和安全区域组成 我想做的是,当用户在我的网站地址中键入: 如果匿名->转到主页 如果记住->进入安全区域 我试过两种不同的方法,但都不管用 1)如果我将我的url/放在安全区域,我将正确重定向到登录路径。但在security.yml中选择登录路径时,我遇到了一个问题: 如果我放置了/login,匿名将重定向到登录,而不是主页 如果我放入/homepage,匿名者将被重定向到h

我正在用symfony2.2开发一个网站。我使用FOSUserBundle,我的网站基本上由主页、登录页面、注册页面和安全区域组成

我想做的是,当用户在我的网站地址中键入:

  • 如果匿名->转到主页

  • 如果记住->进入安全区域

我试过两种不同的方法,但都不管用

1)如果我将我的url/放在安全区域,我将正确重定向到登录路径。但在security.yml中选择登录路径时,我遇到了一个问题:

  • 如果我放置了/login,匿名将重定向到登录,而不是主页

  • 如果我放入/homepage,匿名者将被重定向到homepage,但如果在登录表单中输入错误凭据,他们将被重定向到homepage,而不是在/login中看到错误消息

2)如果我将我的url/放在与我的主页和登录路径相对应的匿名用户可用的位置上,那么它工作得很好,除非记住的用户也可以访问主页而不是安全区域

在最后一种情况下,如果我看到它们被记住,我会尝试将它们重定向到安全区域,但我在论坛中找到的2个代码和我在控制器中尝试的代码都不起作用

public function indexAction()
    {
        $securityContext = $this->container->get('security.context');
        $user = $securityContext->getToken()->getUser();
        if (is_object($user) && $user instanceof UserInterface ) {
            return $this->redirect($this->generateUrl('tk_user_homepage'));
        }else if( $securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED') ){
            return $this->redirect($this->generateUrl('tk_user_homepage'));
        }else{
            return $this->render('TkWelcomeBundle:Default:index.html.twig');
        }
    }
当我回到我的网站,我得到$user作为一个非对象,第二个声明是假的。但是,我可以使用url访问安全区域

正确的方法是什么(1或2)以及我在每种情况下遗漏了什么

编辑

实际上我做了这个测试:

从主页到安全区域来回移动,测试用户是否被授予:

“角色用户”、“正在进行身份验证”、“正在进行身份验证”和“已完全验证”

在安全区域,我得到了我期望的(1,0,1,1),但当我进入主页时,它是(0,0,0),我可以返回安全区域并检索(1,0,1,1)

所以我想我的主页上没有安全上下文。有人对此有什么暗示吗

提前谢谢大家,,
朱尔斯

以下是似乎有效的方法:

我需要有防火墙下的网址,提供给用户访问用户。所以我把我所有的网站放在匿名授权的安全区域,玩访问控制:让匿名者访问主页/登录/注册,然后我只允许记住的用户访问整个网站

这是我的保安

firewalls:
    secured_area:
        pattern: ^/
        anonymous: ~
        form_login:
            login_path: /login
            check_path: /login_check
            default_target_path: tk_user_homepage
            provider: fos_userbundle
            remember_me: true
            csrf_provider: form.csrf_provider
        remember_me:
            key: %secret%
        logout:
            path:   fos_user_security_logout
            target: fos_user_security_login

access_control:
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: IS_AUTHENTICATED_REMEMBERED }
    - { path: ^/admin/, role: ROLE_ADMIN }
我希望这会对一些人有所帮助

朱尔斯