FOSUserBundle:使用 form_login 配置要由防火墙处理的检查路径
FOSUserBundle: configure the check path to be handled by the firewall using form_login
我在我的 symfony 项目中下载了 FOSUser Bundle。
这是包的路由文件:
# Manage security
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
# User Profil
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
# Register User
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
# Reset User password
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetPassword
# Change User password
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /changePassword
现在,当我想转到登录页面时,一切正常,但是当我想连接用户时,出现此错误:
You must configure the check path to be handled by the firewall using
form_login in your security firewall configuration.
这是我的配置文件,security.yml:
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
default:
anonymous: ~
main:
pattern: ^/
form_login:
check_path: fos_user_security_login_check
login_path: fos_user_security_login
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
logout:
path: fos_user_security_logout
target: /
anonymous: true
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
我做错了什么?
此外,当我想注销时出现此错误:
You must activate the logout in your security firewall configuration.
使用这个:
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
check_path: /login_check
failure_path: /login
default_target_path: /profile/
always_use_default_target_path: true
只需删除您的 default
防火墙:
default:
anonymous: ~
它会捕获您的所有请求,因为防火墙是按照它们定义的顺序进行测试的。
所以在像登录页面这样的 FOSUserBundle 页面上,没有 form_login
提供商,也没有 logout
提供商。
我认为这是 You must configure the check path to be handled by the firewall using form_login in your security firewall configuration
的副本
您的代码仅在 check_path 值的部分有误。
这是您的原始代码:
main:
pattern: ^/
form_login:
check_path: fos_user_security_login_check
login_path: fos_user_security_login
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
你应该使用类似的东西:
main:
pattern: ^/
form_login:
check_path: fos_user_security_login_check
login_path: /login_check
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
注意 check_path 的值只有一个字符串。如果您使用值 fos_user_security_check,则您正在调用 SecurityController.php class and invoking the checkAction() 方法,该方法只会抛出 RuntimeError 异常并显示错误“您必须配置在您的安全防火墙配置中使用 form_login 由防火墙处理的检查路径。”。所以修复非常简单,不使用值 fos_user_security_check
我花了好几天时间才弄清楚,这是一个非常简单的解决方案。希望通过发布我所做的来节省别人一些时间。只需要删除
check_path: fos_user_security_login_check
我的 security.yml 现在看起来像这样:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
login_path: fos_user_security_login
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
default_target_path: /admin/materials/
always_use_default_target_path: true
logout:
path: fos_user_security_logout
target: /
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
我在我的 symfony 项目中下载了 FOSUser Bundle。
这是包的路由文件:
# Manage security
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
# User Profil
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
# Register User
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
# Reset User password
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetPassword
# Change User password
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /changePassword
现在,当我想转到登录页面时,一切正常,但是当我想连接用户时,出现此错误:
You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.
这是我的配置文件,security.yml:
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
default:
anonymous: ~
main:
pattern: ^/
form_login:
check_path: fos_user_security_login_check
login_path: fos_user_security_login
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
logout:
path: fos_user_security_logout
target: /
anonymous: true
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
我做错了什么?
此外,当我想注销时出现此错误:
You must activate the logout in your security firewall configuration.
使用这个:
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
check_path: /login_check
failure_path: /login
default_target_path: /profile/
always_use_default_target_path: true
只需删除您的 default
防火墙:
default:
anonymous: ~
它会捕获您的所有请求,因为防火墙是按照它们定义的顺序进行测试的。
所以在像登录页面这样的 FOSUserBundle 页面上,没有 form_login
提供商,也没有 logout
提供商。
我认为这是 You must configure the check path to be handled by the firewall using form_login in your security firewall configuration
的副本您的代码仅在 check_path 值的部分有误。
这是您的原始代码:
main:
pattern: ^/
form_login:
check_path: fos_user_security_login_check
login_path: fos_user_security_login
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
你应该使用类似的东西:
main:
pattern: ^/
form_login:
check_path: fos_user_security_login_check
login_path: /login_check
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
注意 check_path 的值只有一个字符串。如果您使用值 fos_user_security_check,则您正在调用 SecurityController.php class and invoking the checkAction() 方法,该方法只会抛出 RuntimeError 异常并显示错误“您必须配置在您的安全防火墙配置中使用 form_login 由防火墙处理的检查路径。”。所以修复非常简单,不使用值 fos_user_security_check
我花了好几天时间才弄清楚,这是一个非常简单的解决方案。希望通过发布我所做的来节省别人一些时间。只需要删除
check_path: fos_user_security_login_check
我的 security.yml 现在看起来像这样:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
login_path: fos_user_security_login
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
default_target_path: /admin/materials/
always_use_default_target_path: true
logout:
path: fos_user_security_logout
target: /
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }