我在设置Symfony 2的安全性方面有一些问题。我现在的security.yml里有这个
security:
encoders:
Acme\AdminBundle\Entity\AdminUsers:
algorithm: bcrypt
Acme\UserBundle\Entity\Users:
algorithm: bcrypt
role_hierarchy:
ROLE_USER: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
providers:
provider_admin:
entity: { class: AdminBundle:AdminUsers, property: username }
provider_user:
entity: { class: UserBundle:Users, property: username }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
security: false
anonymous: ~
recover:
pattern: ^/(recover-password|generate-hash)$
security: false
anonymous: ~
secured_area:
pattern: ^/
provider: provider_admin
host: admin.example.dev
form_login:
check_path: /login_check
login_path: /login
always_use_default_target_path: false
default_target_path: /
username_parameter: _username
password_parameter: _password
logout:
path: /logout
target: /
anonymous: ~
public_secured_area:
pattern: ^/dashboard
host: app.example.dev
provider: provider_user
form_login:
check_path: /dashboard/login_check
login_path: /login
always_use_default_target_path: false
default_target_path: /dashboard
username_parameter: _username
password_parameter: _password
logout:
path: /public/logout
target: /login
anonymous: ~
access_control:
- { path: ^/dashboard/*, roles: ROLE_USER }
- { path: ^/*, roles: ROLE_ADMIN }正如您所看到的,我有两个不同的提供者,两个不同的防火墙和两个不同的主机。这是因为我需要记录app.example.dev上的users表和admin.example.dev上的AdminUsers表中的用户。
这就是我的admin routing.yml中的内容:
login:
path: /login
host: admin.example.dev
defaults: { _controller: UserBundle:Security:login }
login_check:
path: /login_check
host: admin.example.dev
logout:
path: /logout
host: admin.example.dev这就是我的应用程序 routing.yml中的内容
public_login:
path: /login
host: app.example.dev
defaults: { _controller: PublicBundle:Default:login }
public_login_check:
path: /dashboard/login_check
host: app.example.dev
public_logout:
path: /dashboard/logout
host: app.example.dev现在它的设置方式在管理端一切都正常工作。在应用程序端,注销不起作用,上面写着:
Unable to find the controller for path "/dashboard/logout". Maybe you forgot to add the matching route in your routing configuration?
404 Not Found - NotFoundHttpException它们似乎是以类似的方式设置的,但是解决方案是让我在应用程序中设置一个实际的控制器。注销路由,添加一个带有实际注销的注销操作,并将代码重定向以使其工作。这说明我出了点问题。知道那是什么吗?
此外,登录一开始也不起作用,因为我在access_control部分的security.yml文件中的两个条目被反转,直到我再次读取文档,并且我理解其中的路径需要从特殊到一般列出。
因此,我的第二个问题是:没有办法将access_control条目绑定到某个防火墙,或者至少连接到主机上吗?
编辑:虽然我得到了答案,见下文,但我仍然想了解我的最后一个问题,以上两段,是一个有效的。
谢谢。
发布于 2014-11-21 15:02:29
更改public_secured_area防火墙如下:
public_secured_area:
...
logout:
path: /dashboard/logout
target: /login
anonymous: ~或者像这样改变应用程序的路由:
public_logout:
path: /public/logout
host: app.example.dev路由和注销路径都应该是相同的。
https://stackoverflow.com/questions/27062762
复制相似问题