login_check 使用 FosUserBundle 在登录表单中执行错误的重定向
login_check performs a wrong redirect in login form using FosUserBundle
我使用覆盖 FosUserBundle 的 UserBundle,在那里我为所有用户路由设置了 users
前缀:
// UserBundle/Resources/config/routing/all.xml
...
<import
resource="@FooUserBundle/Resources/config/routing/security.xml"
prefix="/users/" />
<import
resource="@FooUserBundle/Resources/config/routing/profile.xml"
prefix="/users/profile" />
<import
resource="@FooUserBundle/Resources/config/routing/registration.xml"
prefix="/users/register" />
...
如果我使用 php app/console route:debug
检查路由,它们将显示为预期的前缀:
fos_user_security_login ANY ANY ANY /users/login
fos_user_security_check POST ANY ANY /users/login_check
fos_user_security_logout ANY ANY ANY /users/logout
fos_user_registration_register ANY ANY ANY /users/register/
我使用以下 url 来显示登录表单:
http://www.foo.local/app_dev.php/users/login
为了管理提交,我在我的 twig 模板中使用了这个路径:
<form action="{{ path("fos_user_security_check") }}" method="post">
模板处理完成后生成所需的操作url:
<form action="/app_dev.php/users/login_check" method="post">
我的 security.yml 配置是这样的:
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
但是,如果我使用此表单登录用户,它会将我重定向到 http://www.foo.local/app_dev.php/login,而不是 http://www.foo.local/app_dev.php/users/login,给出 "no route found error"
我该如何解决这个问题?
FOSUserBundle 不处理登录。它由安全组件完成。所以 FOSUserBundle 没有办法改变它,因为它不对默认行为负责。
表单登录允许配置登录后重定向:http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-after-success
我看到了 2 种方法:
使用自定义成功处理程序(更简洁的方法,但更复杂且尚未在官方文档中记录)
将登录后的重定向设置为固定路径(如文档中所述),控制器再次重定向。
我使用覆盖 FosUserBundle 的 UserBundle,在那里我为所有用户路由设置了 users
前缀:
// UserBundle/Resources/config/routing/all.xml
...
<import
resource="@FooUserBundle/Resources/config/routing/security.xml"
prefix="/users/" />
<import
resource="@FooUserBundle/Resources/config/routing/profile.xml"
prefix="/users/profile" />
<import
resource="@FooUserBundle/Resources/config/routing/registration.xml"
prefix="/users/register" />
...
如果我使用 php app/console route:debug
检查路由,它们将显示为预期的前缀:
fos_user_security_login ANY ANY ANY /users/login
fos_user_security_check POST ANY ANY /users/login_check
fos_user_security_logout ANY ANY ANY /users/logout
fos_user_registration_register ANY ANY ANY /users/register/
我使用以下 url 来显示登录表单:
http://www.foo.local/app_dev.php/users/login
为了管理提交,我在我的 twig 模板中使用了这个路径:
<form action="{{ path("fos_user_security_check") }}" method="post">
模板处理完成后生成所需的操作url:
<form action="/app_dev.php/users/login_check" method="post">
我的 security.yml 配置是这样的:
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
但是,如果我使用此表单登录用户,它会将我重定向到 http://www.foo.local/app_dev.php/login,而不是 http://www.foo.local/app_dev.php/users/login,给出 "no route found error"
我该如何解决这个问题?
FOSUserBundle 不处理登录。它由安全组件完成。所以 FOSUserBundle 没有办法改变它,因为它不对默认行为负责。
表单登录允许配置登录后重定向:http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-after-success
我看到了 2 种方法:
使用自定义成功处理程序(更简洁的方法,但更复杂且尚未在官方文档中记录) 将登录后的重定向设置为固定路径(如文档中所述),控制器再次重定向。