我正在用 symfony 2.2 开发一个网站。我使用 FOSUserBundle,我的网站基本上由主页、登录页面、注册页面和安全区域组成。
我想要做的是当用户输入我的网站地址时:
如果匿名 -> 转到主页
如果记得 -> 去安全区域
我尝试了 2 种不同的方法,但它们不起作用。
1)如果我将我的 url /放在安全区域中,我会正确重定向到 login_path。但是在 security.yml 中选择我的 login_path 时,我遇到了一个问题:
如果我把/login,匿名重定向到登录而不是主页
如果我放/homepage,匿名将被重定向到主页,但如果在登录表单中输入错误凭据,它们将被重定向到主页,而不是在/login中看到错误消息
2)如果我将我的 url /提供给与我的主页相对应的匿名用户,并且 login_path = /login它工作得很好,除了记住的用户也可以访问主页而不是安全区域。
在最后一种情况下,如果我发现它们被记住了,我会尝试将它们重定向到安全区域,但是我在论坛中找到的 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),在每种情况下我都缺少什么?
编辑
其实我做了这个测试:
从主页到安全区域来回移动并测试用户是否为 is_granted:
'role_user'、'is_authenticated_anonimously'、'is_authenticated_remembered' 和 'is_authenticated_fully'
在安全区域中,我得到了我期望的(1,0,1,1),但是当我进入主页时它是(0,0,0,0),我可以返回安全区域并检索(1,0, 1,1)。
所以我猜我的主页上没有安全上下文。有人对此有提示吗?
提前谢谢你,朱尔斯