symfony 中的资产文件在防火墙后面?
Posted
技术标签:
【中文标题】symfony 中的资产文件在防火墙后面?【英文标题】:Assetic files in symfony are behind the firewall? 【发布时间】:2012-08-22 07:29:55 【问题描述】:我有这样简单的登录页面和安全设置:
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
use_referer: true
always_use_default_target_path: true
default_target_path: /
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: ^/, role: ROLE_ADMIN
在我的 base.html.twig 文件中有
% stylesheets '@BrStgCcBundle/Resources/public/css/bootstrap.css' %
<link rel="stylesheet" href=" asset_url " />
% endstylesheets %
并且仅当我在 app.xml 中获得授权时才包含这些文件。所以登录后系统会找到这个资产,但之前没有,当我按照资产生成的链接时,我被重定向到登录页面。
在视图中,链接如下所示:
<link rel="stylesheet" href="/app_dev.php/css/026adfc_bootstrap_1.css" />
此文件存在于驱动器上,当登录时调用时,未登录时显示正确的 CSS,它会将我重定向到登录页面。
【问题讨论】:
【参考方案1】:我还发现,如果添加到 security.yml
,这会有所帮助:
firewalls:
dev:
pattern: ^/(_profiler|_wdt|css|js|assets)
security: false
【讨论】:
你一开始就不应该从security.yml
中删除它。 :P
注意:防火墙下的 dev 部分需要在 main 部分之前或任何您为安全起见的部分之前【参考方案2】:
这是正常的。您是说根目录下的所有内容(模式:^/)都位于主防火墙之后,并且要访问这些文件,您需要成为管理员(路径:^/,角色:ROLE_ADMIN)。所以需要另外设置一条规则,说css目录可以匿名访问:
- path: ^/css, role: IS_AUTHENTICATED_ANONYMOUSLY
【讨论】:
这是一个蹩脚的解决方案。使用另一个答案中建议的dev
防火墙。
这是错误的,问题的真正解决方案是 Bartosz Rychlicki 的回答以上是关于symfony 中的资产文件在防火墙后面?的主要内容,如果未能解决你的问题,请参考以下文章