我正在尝试对symfony2防火墙进行身份验证,这是我的安全配置
security:
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]
providers:
in_memory:
users:
user: { password: user, roles: [ 'ROLE_USER' ] }
admin: { password: admin, roles: [ 'ROLE_ADMIN' ]}
#main:
#entity: { class: Surgeworks\CoreBundle\Entity\User, property: username}
firewalls:
public:
pattern: .*
security: false
anonymous: true
form_login:
check_path: /{_locale}/admin/logincheck
login:
pattern: ^/{_locale}/admin/login$
security: false
anonymous: ~
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
anonymous: ~
secured_area :
provider: in_memory
pattern: ^/{_locale}/admin/.*
form_login:
check_path: /{_locale}/admin/logincheck
login_path: /{_locale}/admin/login
logout:
path : /{_locale}/admin/logout
target : /{_locale}/admin/
remember_me:
key: aSecretKey
lifetime: 3600
path: /admin/
domain: ~ # Defaults to the current domain from $_SERVER
access_control:
- { path: ^/{_locale}/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/{_locale}/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/ar/admin/logincheck, roles: ROLE_ADMIN }
- { path: ^/(ar|en|fr)/admin/, roles: ROLE_ADMIN }
这是DaghoSiteBundle/Resources/config/routing.yml
中的路由:
_admin:
pattern: /admin/
defaults: { _controller: DaghoSiteBundle:Login:login , _locale : ar }
requirements:
_locale: (ar|en|fr)
login:
pattern: /admin/login
defaults : { _controller: DaghoSiteBundle:Login:login , _locale : ar }
requirements:
_locale: (ar|en|fr)
logincheck:
pattern: /admin/logincheck
#defaults: { _controller: DaghoSiteBundle:Login:logincheck , _locale: ar }
#requirements:
#_locale: (ar|en|fr)
logout:
pattern: /admin/logout
我无法通过这些设置登录, 它总是抛出异常
无法找到路径“/ ar / admin / logincheck”的控制器。也许 您忘记在路由配置中添加匹配路由
即使设置了路线check_path
页面>>我可以查看check_path
而无需重定向到登录页面..
/en/admin >> login page
/en/logincheck >> display the logincheck template (i.e /en/logincheck isn't behind firewall )
如何修复或调试此问题,请告知
更新:
对不起,我可能会忘记写道,我已将{_locale}
这样的包裹作为前缀
在我的routing.yml
DaghoSiteBundle:
resource: "@DaghoSiteBundle/Resources/config/routing.yml"
prefix: /{_locale}
requirements:
_locale: ar|en|fr
defaults: { _locale: ar }
答案 0 :(得分:2)
我认为您必须更改路线模式以包含_locale
参数。例如,您应使用pattern: /admin/logincheck
pattern: {_locale}/admin/logincheck
您还可以使用控制台命令app/console router:debug
调试路由。
我不是100%确定这可以解决您的问题,但我希望它可以帮助您收集有关您的问题的更多信息。
答案 1 :(得分:0)
为什么不试试
logincheck:
pattern: /admin/login_check
#defaults: { _controller: DaghoSiteBundle:Login:logincheck , _locale: ar }
#requirements:
#_locale: (ar|en|fr)
答案 2 :(得分:0)
这解决了我的问题,但我的情况很简单,没有{_locale}功能,但也许它会对你有所帮助。
从Symf2书的安全章节:
常见陷阱#3:确保/ login_check位于防火墙后面。
在security.yml文件中,看起来你的check_path路由是/ {_ locale} / admin / logincheck,你的安全路径是^ / {_ locale} / admin /.*后面的任何东西。
所以这似乎很好。
你可能想尝试删除。*(你真的需要吗?)
并进一步向下访问控制部分中的文件,您提供了一个特定的条目,以确保check_path需要身份验证:
- {path:^ / ar / admin / logincheck,roles:ROLE_ADMIN}
也许尝试指定这个:
- {path:^ / {_ locale} / admin / logincheck,roles:ROLE_ADMIN}
但实际上,我在想,你甚至可以在security.yml模式值中使用{placeholders}吗?我知道你可以在路由文件中,但我不确定是否安全yml的工作原理是一样的吗?在安全或路由章节的主要symf2书中,我没有看到它被用于任何示例中?