我正在使用symfony 2.2开发一个网站。我使用FOSUserBundle,我的网站基本上由主页,登录页面,注册页面和安全区域组成。
我想要做的是当用户输入我网站的地址时:
如果匿名 - >转到主页
如果被记住 - >去安全区域
我尝试过两种不起作用的东西。
1)如果我将我的网址 / 放入安全区域,我会将重定向正确地发送到login_path。但是当在security.yml中选择我的login_path时,我遇到了一个问题:
如果我将 / login ,匿名重定向到登录而不是主页
如果我将 / homepage ,匿名重定向到主页,但如果在登录表单中输入错误凭据,则会将其重定向到主页,而不是在 /中看到错误消息登录
2)如果我将我的网址 / 提供给我的主页和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视为非对象而第二个语句为false。但是我可以通过网址访问安全区域。
这样做的正确方法是什么(1或2)以及我在每种情况下缺少什么?
修改
其实我做了这个测试:
来回主页前往安全区域并测试用户是否__ granted:
'role_user','is_authenticated_anonimously','is_authenticated_remembered'和'is_authenticated_fully'
在安全区域我得到了我期望的(1,0,1,1)但是当我去主页它是(0,0,0,0)并且我可以回到安全区域并检索(1 ,0,1,1)。
所以我猜我的主页上没有安全上下文。有人对此有暗示吗?
提前谢谢你, 朱尔斯
答案 0 :(得分:0)
这似乎有效:
我需要在防火墙下设置URL,以便用户可以访问用户。所以我把所有网站都放在安全区域,匿名授权并使用访问控制:访问主页/登录/注册匿名,然后我只允许记住用户访问整个网站。
这是我的security.yml
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 }
我希望这会有所帮助。
朱