我正在使用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
。
但这不起作用:当我访问网站时,我被重定向到登录表单,就是这样。
您是否知道我能做到以及如何做到?
N.B。:我不想使用任何Apache功能。
答案 0 :(得分:4)
在我看来,您需要的不是通过HTTP身份验证来管理用户,而是通过HTTP身份验证来限制对您网站的访问。不要使用Symfony2安全性。
保留symfony2应用程序的安全性,因为它将处于生产模式,并使用apache .htaccess来限制对网站的访问。
文档在这里http://httpd.apache.org/docs/2.2/howto/auth.html。您只需在web / .htaccess中添加一些指令,并按照文档中的说明创建用户/密码文件...
答案 1 :(得分:0)
我在Symfony2中的解决方案,使用symfony的基本防火墙(没有FOSUserBundle):
# app/config/security.yml
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: ROLE_USER }
providers:
in_memory:
memory:
users:
redattore: { password: 'somePasswordHere', roles: 'ROLE_USER' }
admin: { password: 'somePasswordHere', roles: 'ROLE_ADMIN' }
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
它对我来说非常合适。这是一个非常基本的配置 - 没有散列密码,没有数据库提供者(“提供者:”部分),没有https连接(一切都在整个互联网上以纯文本形式出现),没有注销内容和其他不错的功能。 我希望它会对你有所帮助。 亲切的问候