Php 从未应用symfony注销目标
我第一次遇到Symfony(2.7)身份验证的问题,我真的找不到有效的解决方案。虽然Symfony有一个专用的配置选项logout->target,但它从来不会应用于注销,我总是被引导到/。我可能错过了正确实现这一点的一些限制 好的,我正在使用:Php 从未应用symfony注销目标,php,symfony,authentication,logout,Php,Symfony,Authentication,Logout,我第一次遇到Symfony(2.7)身份验证的问题,我真的找不到有效的解决方案。虽然Symfony有一个专用的配置选项logout->target,但它从来不会应用于注销,我总是被引导到/。我可能错过了正确实现这一点的一些限制 好的,我正在使用: 基于表单的登录 钩住自定义失败、成功和注销处理程序,这些处理程序工作正常 My config.yml防火墙 secured_area: pattern: ^/ stateless: false
- 基于表单的登录
- 钩住自定义失败、成功和注销处理程序,这些处理程序工作正常
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 }
我正在为路径使用路由名称,路由存在并且工作正常(我可以登录、登录\检查和注销)
通过设置logout->target,我的期望是在注销时重定向到页面/测试。但无论我尝试了什么,直到现在,我总是在登出之后
我会很高兴,如果有人能告诉我正确的方向,如何注销到自定义路由(我也尝试了使用路由名称的target)。非常感谢
顺便说一句:
我的注销\u成功\u处理程序当前不执行任何操作。通过启用转储,我还看到重定向总是要进行/而不是进行/测试
public function onLogoutSuccess(Request $request)
{
$response = parent::onLogoutSuccess($request);
//var_dump($response); die;
return $response;
}
没有内置的注销目标。你必须在你的处理器中处理它 步骤1 将注销目标放入参数文件中
parameters:
logout.target: /test
步骤2
将您定义注销处理程序的service.yml
修改为以下内容:
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);
}
以及对有同样问题的人的最终方法
/**
* LogoutSuccessHandler
*/
class LogoutSuccessHandler extends DefaultLogoutSuccessHandler implements LogoutSuccessHandlerInterface
{
/**
* @var string
*/
private $logout_route;
/**
* Constructor
*
* @param RouterInterface $router
* @param EntityManager $em
*/
public function __construct(HttpUtils $httpUtils, $logoutRoute)
{
$this->logout_route = $logoutRoute;
parent::__construct( $httpUtils );
}
/**
* @param Request $request
* @return Response
*/
public function onLogoutSuccess(Request $request)
{
return $this->httpUtils->createRedirectResponse($request, $this->logout_route);
}
}
我想使用httpUtils,因为createRedirectResponse可以理解路径和路由名称。这很好用!但是有人需要更新一下。这误导了我使用logout.target。这与这个问题非常相似。