Regex FOSUserBundle:安全上下文异常,即使我有默认的主防火墙
我正在使用symfony2和FOSUserBundle。 我有一个用于登录的防火墙,一个用于资产,还有一个用于捕获一切的主防火墙。 当一条路由没有被任何防火墙覆盖时,我仍然会抛出“no security.context”异常,并且您尝试使用“is_grated”()访问它。 路径是mydomain/de_de/area,其中de_de部分显然是my{u locale}。 这是我的config.yml中的FOSUserBundle配置Regex FOSUserBundle:安全上下文异常,即使我有默认的主防火墙,regex,symfony,fosuserbundle,Regex,Symfony,Fosuserbundle,我正在使用symfony2和FOSUserBundle。 我有一个用于登录的防火墙,一个用于资产,还有一个用于捕获一切的主防火墙。 当一条路由没有被任何防火墙覆盖时,我仍然会抛出“no security.context”异常,并且您尝试使用“is_grated”()访问它。 路径是mydomain/de_de/area,其中de_de部分显然是my{u locale}。 这是我的config.yml中的FOSUserBundle配置 firewalls: login_firewall
firewalls:
login_firewall:
pattern: ^/(de_DE|de_CH)/(login|resetting)$
anonymous: true
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
assets_localeless:
pattern: ^/(compiled|web|js|css|_wdt|_profiler)/$
anonymous: true
main:
pattern: ^/$
anonymous: false
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
access_control:
- { path: ^/(compiled|web|js|css|_wdt|_profiler)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/(de_DE|de_CH)/(login|resetting)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/(de_DE|de_CH)/(my-admin|admin), role: ROLE_ADMIN }
- { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
编辑/解决方案:我的问题是正则表达式。我对那篇教程有一个误解。
所以模式是在普通的正则表达式中,这就是为什么我的防火墙都不能工作的原因(见答案)。
新设置如下:
firewalls:
main:
pattern: .
anonymous: true
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
access_control:
- { path: '^/(compiled|web|js|css|_wdt|_profiler)([\w\d/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: '^/([\w]{0,})/(login|resetting|sale|imprint|contact)([\w\d/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: '^/([\w]{0,})/(my-admin|admin)([\w\d/_-]{0,})', role: ROLE_ADMIN }
- { path: '^/([\w]{0,})/([\w\d/_-]{0,})', role: IS_AUTHENTICATED_FULLY }
没有为mydomain/de_de/area配置防火墙。。。这就是为什么您没有该路由的安全上下文 $表示以正则表达式结尾。这就是为什么
- { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }
。。。只会完全匹配
yourdomain/de_DE/
yourdomain/de_CH/
。。。没有其他路线。好的。你能不能加上如何表达“以及下面的任何东西”?我自己就知道了(见编辑)。谢谢你指出我的错误所在。祝您有个美好的一天!