我第一次遇到Symfony(2.7)身份验证问题,我真的找不到可行的解决方案.虽然Symfony有一个专用的配置选项注销 – >目标,这从未在注销时应用,我总是被定向到/.我可能错过了正确实现这一点的一些限制.
好的,我正在使用:
>基于表单的登录
> Hooked自定义失败,成功和注销处理程序,它们运行良好
我的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 }
我正在使用路径的路由名称,路由存在并且正常工作(我可以登录,登录_check和注销).
通过设置注销我的期望 – >目标,注销时我被重定向到页面/测试.但无论我尝试过什么,直到现在我总是在注销之后.
我很高兴,如果有人可以指出我正确的方向,如何注销到自定义路线(我也尝试使用路线名称进行目标).非常感谢!
BTW:
我的logout_success_handler目前没有任何功能.通过启用转储,我也看到,重定向始终是/而不是/ test.
public function onLogoutSuccess(Request $request)
{
$response = parent::onLogoutSuccess($request);
//var_dump($response); die;
return $response;
}
最佳答案 没有内置的注销目标.你必须在你的处理程序中处理它.
步骤1
将您的注销目标放入参数文件中
parameters:
logout.target: /test
第2步
修改service.yml,其中已将logout处理程序定义为以下内容:
some.logout_handler:
class: SomeBundle\Security\YourAuthenticationHandler
arguments: ["@security.context", %logout.target%]
这会将其注入您的处理程序.
第3步
最后,在你的onLogoutSuccess方法中做
public function onLogoutSuccess(Request $request)
{
$response = parent::onLogoutSuccess($request);
return new RedirectResponse($this->logoutTarget);
}