我的symfony2项目中安装了FOS UserBundle。登录/注销工作,唯一的问题是,系统不重定向/关闭我想要关闭的部分。 整个站点只能由loged的用户访问。 但我可以打电话给任何路线。
我填写了我的安全yml的访问控制部分中的数据,但它不起作用。我可以调用mydomain / de_CH / anything / i / want /并访问该内容。
这是我的security.yml:
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
encoders:
FOS\UserBundle\Model\UserInterface: sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
check_path: fos_user_security_check
csrf_provider: form.csrf_provider
logout:
path: fos_user_security_logout
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/my-admin/, role: ROLE_ADMIN }
- { path: ^/$, role: ROLE_USER }
#- { path: ^/$, role: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
答案 0 :(得分:0)
更改
- { path: ^/$, role: ROLE_USER }
到
- { path: ^/.*, role: ROLE_USER }
这是因为,第一个正则表达式告诉您允许ROLE_USER
使用该模式路径/
因此,/foo
/foo/bar
等模式不会从您的防火墙中获取。
第二种模式涵盖后一种情况
答案 1 :(得分:0)
删除anonymous: true
部分并将/login
放入其自己的防火墙,以便用户可以登录。
anonymous
部分允许匿名用户访问该防火墙。
firewalls:
login_firewall:
pattern: ^/login$
anonymous: ~
main:
pattern: ^/
form_login:
# ...
logout:
path: fos_user_security_logout
编辑:由于我们拒绝匿名用户访问该网页,因此我们需要为/login
创建单独的防火墙,否则他们将无法登录。
请参阅官方文档中的“避免常见陷阱”部分:
http://symfony.com/doc/current/book/security.html了解有关此主题的更多信息。