Symfony2 FOSUserBundle 两个登录表单错误配置检查路径
Symfony2 FOSUserBundle two login form error configure the check path
我需要 2 个登录表单。
1 -> 主站点
2 -> 我的后端
我已经看到很多关于这个的帖子了。
我尝试这样做,但出现错误:
"You must configure the check path to be handled by the firewall using form_login in your security firewall configuration."
但是设置在security.yml
我的路线没问题,我的表格没问题,但我没有看到我的错误在哪里。
这是我的security.yml
admin_login:
context: backend
pattern: ^/th-admin/login
anonymous: true
admin_check:
context: backend
pattern: ^/th-admin/login_check
anonymous: true
admin_access_denied:
context: backend
pattern: ^/th-admin/access_denied
anonymous: true
admin:
context: backend
pattern: ^/th-admin
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
#use_referer: true # this is not needed if you always use default target
#always_use_default_target_path: true
#default_target_path: th_admin_dashboard
login_path: th_admin_login
check_path: th_admin_check
logout:
path: th_admin_logout
target: th_admin_login
anonymous: false
access_denied_url: th_admin_denied
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: fos_user_security_login
check_path: fos_user_security_check
logout: true
anonymous: true
access_control:
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin/access_denied, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin/, role: ROLE_ADMIN }
这是我的fos_user配置:
fos_user:
db_driver: orm
firewall_name: main
user_class: TH\UserBundle\Entity\User
这是我的自定义表单:
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form class="m-t" role="form" method="post" action="{{ path("th_admin_check") }}">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<div class="form-group">
<input name="_username" value="{{ last_username }}" type="email" class="form-control" placeholder="{{ 'admin.login.email'|trans }}" required="">
</div>
<div class="form-group">
<input name="_password" type="password" class="form-control" placeholder="{{ 'admin.login.password'|trans }}" required="">
</div>
<input type="hidden" name="_submit" value="Login" />
<button type="submit" class="btn btn-primary block full-width m-b">{{ 'admin.login.login'|trans }}</button>
</form>
这是我的路线:
th_admin_denied:
path: /access_denied
defaults: { _controller: THAdminBundle:Default:accessDenied }
th_admin_login:
path: /login
defaults: { _controller: FOSUserBundle:Security:login }
th_admin_check:
path: /login_check
defaults: { _controller: FOSUserBundle:Security:check }
th_admin_logout:
path: /logout
defaults: { _controller: FOSUserBundle:Security:logout }
th_admin_dashboard:
path: /
defaults: { _controller: THAdminBundle:Dashboard:index }
我尝试清除缓存,硬清除缓存(使用 rm -rf 清空文件夹)
当我设置另一个检查 url 时,这项工作有效,但会转到主防火墙。
防火墙的主要工作。
但是我的管理员后端防火墙不起作用...
有人知道我的错误在哪里吗?
感谢
我的问题是防火墙配置。
需要在 access_control 中订购并且不会创建无用的防火墙。
谢谢大家的回复。
这是好的配置:
firewalls:
admin_firewall:
pattern: ^/th-admin
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
#use_referer: true # this is not needed if you always use default target
#always_use_default_target_path: true
#default_target_path: th_admin_dashboard
login_path: th_admin_login
check_path: th_admin_check
logout:
path: th_admin_logout
target: th_admin_login
anonymous: ~
access_denied_url: th_admin_denied
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: fos_user_security_login
check_path: fos_user_security_check
logout: true
anonymous: true
access_control:
- { path: /th-admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /th-admin/access_denied, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin, role: ROLE_ADMIN }
- { path: ^/th-admin/$, role: ROLE_ADMIN }
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
我需要 2 个登录表单。
1 -> 主站点 2 -> 我的后端
我已经看到很多关于这个的帖子了。
我尝试这样做,但出现错误: "You must configure the check path to be handled by the firewall using form_login in your security firewall configuration."
但是设置在security.yml
我的路线没问题,我的表格没问题,但我没有看到我的错误在哪里。
这是我的security.yml
admin_login:
context: backend
pattern: ^/th-admin/login
anonymous: true
admin_check:
context: backend
pattern: ^/th-admin/login_check
anonymous: true
admin_access_denied:
context: backend
pattern: ^/th-admin/access_denied
anonymous: true
admin:
context: backend
pattern: ^/th-admin
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
#use_referer: true # this is not needed if you always use default target
#always_use_default_target_path: true
#default_target_path: th_admin_dashboard
login_path: th_admin_login
check_path: th_admin_check
logout:
path: th_admin_logout
target: th_admin_login
anonymous: false
access_denied_url: th_admin_denied
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: fos_user_security_login
check_path: fos_user_security_check
logout: true
anonymous: true
access_control:
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin/access_denied, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin/, role: ROLE_ADMIN }
这是我的fos_user配置:
fos_user:
db_driver: orm
firewall_name: main
user_class: TH\UserBundle\Entity\User
这是我的自定义表单:
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form class="m-t" role="form" method="post" action="{{ path("th_admin_check") }}">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<div class="form-group">
<input name="_username" value="{{ last_username }}" type="email" class="form-control" placeholder="{{ 'admin.login.email'|trans }}" required="">
</div>
<div class="form-group">
<input name="_password" type="password" class="form-control" placeholder="{{ 'admin.login.password'|trans }}" required="">
</div>
<input type="hidden" name="_submit" value="Login" />
<button type="submit" class="btn btn-primary block full-width m-b">{{ 'admin.login.login'|trans }}</button>
</form>
这是我的路线:
th_admin_denied:
path: /access_denied
defaults: { _controller: THAdminBundle:Default:accessDenied }
th_admin_login:
path: /login
defaults: { _controller: FOSUserBundle:Security:login }
th_admin_check:
path: /login_check
defaults: { _controller: FOSUserBundle:Security:check }
th_admin_logout:
path: /logout
defaults: { _controller: FOSUserBundle:Security:logout }
th_admin_dashboard:
path: /
defaults: { _controller: THAdminBundle:Dashboard:index }
我尝试清除缓存,硬清除缓存(使用 rm -rf 清空文件夹)
当我设置另一个检查 url 时,这项工作有效,但会转到主防火墙。 防火墙的主要工作。 但是我的管理员后端防火墙不起作用...
有人知道我的错误在哪里吗?
感谢
我的问题是防火墙配置。
需要在 access_control 中订购并且不会创建无用的防火墙。 谢谢大家的回复。
这是好的配置:
firewalls:
admin_firewall:
pattern: ^/th-admin
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
#use_referer: true # this is not needed if you always use default target
#always_use_default_target_path: true
#default_target_path: th_admin_dashboard
login_path: th_admin_login
check_path: th_admin_check
logout:
path: th_admin_logout
target: th_admin_login
anonymous: ~
access_denied_url: th_admin_denied
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: fos_user_security_login
check_path: fos_user_security_check
logout: true
anonymous: true
access_control:
- { path: /th-admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /th-admin/access_denied, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/th-admin, role: ROLE_ADMIN }
- { path: ^/th-admin/$, role: ROLE_ADMIN }
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }