【发布时间】:2012-05-07 11:57:14
【问题描述】:
我正在使用 Symfony 2 构建网站。
工作正在进行中(因此我不希望用户或搜索引擎访问它)但我的客户希望看到我的进度。我在想一个简单的解决方案是使用 Symfony 2 安全功能提供的机制通过 HTTP 身份验证来保护整个网站。
我正在使用 FOSUserBundle,因为网站会有需要注册和登录的用户。
这是我的 security.yml,效果很好:
security:
providers:
fos_userbundle:
id: fos_user.user_manager
encoders:
"FOS\UserBundle\Model\UserInterface": sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
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/, role: ROLE_ADMIN }
- { path: ^/account, role: IS_AUTHENTICATED_FULLY }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
因此,我试图在其上添加其他内容,以允许网站受到 HTTP 身份验证的保护。
我将文件更改为:
security:
providers:
fos_userbundle:
id: fos_user.user_manager
whole_website_provider:
users:
ryan: { password: ryanpass, roles: 'ROLE_USER' }
encoders:
"FOS\UserBundle\Model\UserInterface": sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
whole_website:
pattern: ^/
anonymous: ~
http_basic:
realm: "Secured Demo Area"
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: ^/account, role: IS_AUTHENTICATED_FULLY }
- { path: ^/, role: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
基本上我添加了whole_website_provider 提供程序、whole_website 防火墙和一个额外的access_control。
但这不起作用:当我访问该网站时,我被重定向到登录表单,就是这样。
你知道我是否能做到以及如何做到吗?
注意:我不希望为此使用任何 Apache 功能。
【问题讨论】:
-
如果你把
whole_website防火墙放在第一位会发生什么?不要忘记清除缓存。 -
@gilden:至少显示了身份验证框,但我找不到正确身份验证的方法。
-
很抱歉我没有时间给出适当的建议,但我猜你还需要为
whole_website明确设置用户提供程序,否则 Sf2 将使用第一个。我猜 PéCé 的建议也适用,但有点强迫症,我会采用困难但更优雅的解决方案:)