【发布时间】:2014-10-30 18:03:38
【问题描述】:
我想使用带有 2 个防火墙的 symfony2 应用程序:一个用于前端的数据库用户,另一个用于后端的内存用户。
我已阅读所有文档和各种 stackoverflow 问题,但我无法解决我的问题。
这是我目前的 security.yml 配置:
security:
firewalls:
frontend:
pattern: ^/
provider: fe_users
anonymous: ~
form_login:
username_parameter: _email
login_path: _login
check_path: _login_check
remember_me: true
default_target_path: _profile
#always_use_default_target_path: true
logout:
path: /logout
target: /
remember_me:
key: MiPassphrase
lifetime: 1800
path: /.*
domain: ~
backend:
pattern: ^/backend
provider: be_users
anonymous: ~
http_basic:
realm: ""
access_control:
- { path: ^/backend$, roles: ROLE_ADMIN }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
encoders:
vv\xx\Entity\User:
algorithm: bcrypt
Symfony\Component\Security\Core\User\User: plaintext
providers:
fe_users:
entity: { class: vvxx:User, property: email }
be_users:
memory:
users:
d: { password: c, roles: 'ROLE_ADMIN' }
会发生什么:
前端身份验证工作正常。如果用户没有登录到前端,/backend 的访问会将我重定向到 /login。如果用户登录(并通过身份验证)到前端,则 /backend 的访问会给我一个 403 访问被拒绝。 “经典”的 http 身份验证登录表单永远不会出现。
任何人都可以看看我的配置并找出我在这里做错了什么吗?
非常感谢您的帮助:)
【问题讨论】:
-
您是否尝试过在每个防火墙中使用相同的
context?例如context: my_project在两个防火墙中 -
尝试反转防火墙顺序,将后端放在前端之前
-
是的,就像@IgorPantović 所说,您的所有路线都被
^/模式捕获,因此切换它们应该可以为您完成。 -
很好,成功了!非常感谢你们!我认为该规则仅对 access_control 很重要,但不知道它也适用于防火墙。有人想发布答案以便我接受吗?
-
它现在可以在 localhost 中运行,但是服务器上的 http 身份验证完全失败 - 没有输入显示,路由可访问:/
标签: php security symfony authentication