我使用所需的身份验证(使用FOSUserBundle)开发了我的symfony2网站。 现在我决定为匿名访问者增加2个例外:索引页面(“/”)和联系表单(“/ contact”)。
当我修改我的security.yml时,这些会被破坏:
这是我的security.yml。我知道它可以是微不足道的,但是我没有在doc中找到它,我可以通过security.yml文件获得更多关于“让我与经过身份验证的会话生活保持联系”的信息。我尝试的一切都行不通。
security:
encoders:
"FOS\UserBundle\Model\UserInterface": sha512
role_hierarchy:
ROLE_AUTHOR: ROLE_USER
ROLE_ADMIN: [ROLE_USER, ROLE_AUTHOR]
providers:
fos_userbundle:
id: fos_user.user_manager
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/(login$|register|resetting)
anonymous: true
token:
pattern: ^/administration/create-user/confirmation-token/
anonymous: true
#this is where it fail....
contact:
pattern: ^/contact$
anonymous: true
index:
pattern: ^/$
anonymous: true
# Main Firewall
main:
pattern: ^/+
form_login:
provider: fos_userbundle
remember_me: true
remember_me:
key: %secret%
anonymous: false
logout: true
#http_basic:
# realm: "Secured Demo Area"
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
提前谢谢
答案 0 :(得分:3)
你做错了:)你只需要几个防火墙。并非每个网址的每个防火墙。
以这种方式做到:
firewalls:
main:
pattern: ^/
switch_user: true
anonymous: ~
form_login:
provider: fos_userbundle
login_path: /login
logout:
path: /logout
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
接下来将另一项添加到access_control中。
答案 1 :(得分:1)
您不必为联系人和索引创建不同的防火墙,而是必须将它们添加到access_control
,因为它们应该由与应用程序其余部分(main
)相同的冷壁处理,它们只是不同之处在于您要修改哪些角色可以访问它们:
main:
pattern: ^/
...
access_control:
- { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/contact$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
编辑以澄清: 像您一样指定不同的防火墙,将这些页面放在当前安全上下文之外,因此从防火墙主页登录不适用于这些防火墙。