symfony 3 + FosUserBundle 防火墙页面不显示登录表单
symfony 3 + FosUserBundle firewalled pages do not display login form
我正在用 Symfony3 制作一个网站,预计需要对某些页面进行防火墙保护。对于用户管理,我正在使用 FosUserBundle ~2.0@dev.
登录和注销有效(所以在我看来 FosUserBundle 配置正确)。
如果页面有防火墙,我希望显示登录表单。
但是,这些 URL 不遵守防火墙并为匿名用户显示其内容...
- localhost:8000/en/admin
- localhost:8000/en/admin/delete-tev
- localhost:8000/en/admin/import-tev
- localhost:8000/en/admin/点击列表
这是我的 security.yml 配置:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|img|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
check_path: fos_user_security_check
csrf_token_generator: security.csrf.token_manager
logout:
path: fos_user_security_logout
target: goods_list_exclusive
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/click_list, role: ROLE_ADMIN }
- { path: ^/admin/import_tev, role: ROLE_ADMIN }
- { path: ^/admin/delete_tev, role: ROLE_ADMIN }
- { path: ^/admin/, role: ROLE_ADMIN }
这是我的路线:
app:
resource: "@AppBundle/Controller/"
type: annotation
# redirecting home
homepage:
path: /
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
# redirecting home
homepage_lv:
path: /lv/
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
# redirecting home
homepage_en:
path: /en/
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
# redirecting home
homepage_ru:
path: /ru/
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
goods_list_exclusive:
path: /{_locale}/goods-list-exclusive
defaults: { _controller: AppBundle:Goods:goodsListExclusive }
requirements:
_locale: lv|en|ru
goods_list_new:
path: /{_locale}/goods-list-new
defaults: { _controller: AppBundle:Goods:goodsListNew }
requirements:
_locale: lv|en|ru
goods_show:
path: /{_locale}/goods-show/{id}
defaults: { _controller: AppBundle:Goods:goodsShow }
requirements:
_locale: lv|en|ru
goods_external_link:
path: /{_locale}/goods-external-link/{id}
defaults: { _controller: AppBundle:Goods:goodsExternalLink }
requirements:
_locale: lv|en|ru
admin_import_tev:
path: /{_locale}/admin/import-tev
defaults: { _controller: AppBundle:Import:importTev }
requirements:
_locale: lv|en|ru
admin_delete_tev:
path: /{_locale}/admin/delete-tev
defaults: { _controller: AppBundle:Delete:deleteTev }
requirements:
_locale: lv|en|ru
admin_click_list:
path: /{_locale}/admin/click-list
defaults: { _controller: AppBundle:Click:clickList }
requirements:
_locale: lv|en|ru
admin:
path: /{_locale}/admin
defaults: { _controller: AppBundle:Default:admin }
requirements:
_locale: lv|en|ru
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: /{_locale}
感谢您的宝贵时间。
您的访问控制规则中限制匿名用户访问的模式均以 /admin
开头,而 URL 路径以语言环境开头。因此,您应该更新模式以匹配实际路径。例如,你可以有这样的东西(它假设总是有两个字母的语言环境,但你可以根据你的需要调整它):
access_control:
# ...
- { path: '^/[a-z]{2}/admin/click_list', role: ROLE_ADMIN }
- { path: '^/[a-z]{2}/admin/import_tev', role: ROLE_ADMIN }
- { path: '^/[a-z]{2}/admin/delete_tev', role: ROLE_ADMIN }
- { path: '^/[a-z]{2}/admin/', role: ROLE_ADMIN }
我正在用 Symfony3 制作一个网站,预计需要对某些页面进行防火墙保护。对于用户管理,我正在使用 FosUserBundle ~2.0@dev.
登录和注销有效(所以在我看来 FosUserBundle 配置正确)。
如果页面有防火墙,我希望显示登录表单。
但是,这些 URL 不遵守防火墙并为匿名用户显示其内容...
- localhost:8000/en/admin
- localhost:8000/en/admin/delete-tev
- localhost:8000/en/admin/import-tev
- localhost:8000/en/admin/点击列表
这是我的 security.yml 配置:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|img|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
check_path: fos_user_security_check
csrf_token_generator: security.csrf.token_manager
logout:
path: fos_user_security_logout
target: goods_list_exclusive
logout: true
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/click_list, role: ROLE_ADMIN }
- { path: ^/admin/import_tev, role: ROLE_ADMIN }
- { path: ^/admin/delete_tev, role: ROLE_ADMIN }
- { path: ^/admin/, role: ROLE_ADMIN }
这是我的路线:
app:
resource: "@AppBundle/Controller/"
type: annotation
# redirecting home
homepage:
path: /
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
# redirecting home
homepage_lv:
path: /lv/
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
# redirecting home
homepage_en:
path: /en/
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
# redirecting home
homepage_ru:
path: /ru/
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: goods_list_exclusive
permanent: true
goods_list_exclusive:
path: /{_locale}/goods-list-exclusive
defaults: { _controller: AppBundle:Goods:goodsListExclusive }
requirements:
_locale: lv|en|ru
goods_list_new:
path: /{_locale}/goods-list-new
defaults: { _controller: AppBundle:Goods:goodsListNew }
requirements:
_locale: lv|en|ru
goods_show:
path: /{_locale}/goods-show/{id}
defaults: { _controller: AppBundle:Goods:goodsShow }
requirements:
_locale: lv|en|ru
goods_external_link:
path: /{_locale}/goods-external-link/{id}
defaults: { _controller: AppBundle:Goods:goodsExternalLink }
requirements:
_locale: lv|en|ru
admin_import_tev:
path: /{_locale}/admin/import-tev
defaults: { _controller: AppBundle:Import:importTev }
requirements:
_locale: lv|en|ru
admin_delete_tev:
path: /{_locale}/admin/delete-tev
defaults: { _controller: AppBundle:Delete:deleteTev }
requirements:
_locale: lv|en|ru
admin_click_list:
path: /{_locale}/admin/click-list
defaults: { _controller: AppBundle:Click:clickList }
requirements:
_locale: lv|en|ru
admin:
path: /{_locale}/admin
defaults: { _controller: AppBundle:Default:admin }
requirements:
_locale: lv|en|ru
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: /{_locale}
感谢您的宝贵时间。
您的访问控制规则中限制匿名用户访问的模式均以 /admin
开头,而 URL 路径以语言环境开头。因此,您应该更新模式以匹配实际路径。例如,你可以有这样的东西(它假设总是有两个字母的语言环境,但你可以根据你的需要调整它):
access_control:
# ...
- { path: '^/[a-z]{2}/admin/click_list', role: ROLE_ADMIN }
- { path: '^/[a-z]{2}/admin/import_tev', role: ROLE_ADMIN }
- { path: '^/[a-z]{2}/admin/delete_tev', role: ROLE_ADMIN }
- { path: '^/[a-z]{2}/admin/', role: ROLE_ADMIN }