我第一次遇到 Symfony (2.7) 身份验证问题,我真的找不到可行的解决方案。尽管 Symfony 有一个专用的配置选项 logout -> target,但它从未应用于注销,我总是被定向到/。我可能错过了正确实现此方法的一些限制条件。
好的,我正在使用:
- 基于表单的登录
- Hook 自定义失败、成功和注销处理程序,它们运行良好
我的config.yml防火墙
secured_area:
pattern: ^/
stateless: false
form_login:
...
logout:
path: logout
target: /test
success_handler: logout_success_handler
anonymous: ~
为了测试我什至添加了
access_control:
- { path: ^/test, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
我正在为路径使用路由名称,该路由存在并且工作正常(我可以登录、login_check 和注销 ).
我希望通过设置logout -> target,在注销时我会被重定向到页面/test。但无论我尝试过什么,直到现在我总是处于注销状态/注销之后。
如果有人能指出正确的方向,我会很高兴,如何注销到自定义路由(我也已经尝试使用路由名称目标)。非常感谢!
顺便说一句:
我的 logout_success_handler 目前什么都不做。通过启用转储,我还看到,重定向始终指向/而不是/test。
public function onLogoutSuccess(Request $request)
{
$response = parent::onLogoutSuccess($request);
//var_dump($response); die;
return $response;
}
最佳答案
没有内置的注销目标。你必须在你的处理程序中处理它。
第一步
将注销目标放入参数文件
parameters:
logout.target: /test
第 2 步
修改您定义注销处理程序的 service.yml
:
some.logout_handler:
class: SomeBundle\Security\YourAuthenticationHandler
arguments: ["@security.context", %logout.target%]
这会将它注入(inject)到您的处理程序中。
第 3 步
最后,在您的onLogoutSuccess
方法中执行
public function onLogoutSuccess(Request $request)
{
$response = parent::onLogoutSuccess($request);
return new RedirectResponse($this->logoutTarget);
}
关于php - symfony 注销目标从未应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902400/