我需要2个登录表单。
1->主站点2->我的后端
我看到了很多线索。
我试着去做,但我有一个错误:"您必须在安全防火墙配置中使用form_login配置要由防火墙处理的检查路径。"
但它是安全设置的。yml
我的路线还可以,我的表格还可以,而且我不知道我的错误在哪里。
这是我的安全。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时,这是有效的,但这会进入主防火墙。主防火墙工作。但是我的管理后台防火墙不起作用。。。
有人知道我的错误在哪里吗?
Thx
我的问题是防火墙配置。
需要在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 }