symfony 注销目标从未应用
Posted
技术标签:
【中文标题】symfony 注销目标从未应用【英文标题】:symfony logout target never applied 【发布时间】:2015-12-30 09:10:48 【问题描述】:我第一次遇到 Symfony (2.7) 身份验证问题,我真的找不到可行的解决方案。尽管 Symfony 有一个专用的配置选项 logout -> target,但这永远不会应用于注销,我总是被定向到 /。我可能错过了正确实施这一点的一些限制。
好的,我正在使用:
基于表单的登录 挂钩的自定义失败、成功和注销处理程序,它们运行良好我的 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、login_check 和 logout )。
我期望通过设置 logout -> target,在注销时我会被重定向到页面 /test。但无论我尝试了什么,直到现在我总是在/注销后。
我会很高兴,如果有人能指出我正确的方向,如何退出自定义路线(我也尝试过 target 与路线名称)。非常感谢!
顺便说一句:
我的 logout_success_handler 目前什么都不做。通过启用转储,我还看到,重定向始终是 / 而不是 /test。
public function onLogoutSuccess(Request $request)
$response = parent::onLogoutSuccess($request);
//var_dump($response); die;
return $response;
【问题讨论】:
【参考方案1】:对于有同样问题的人来说,最后的方法。
/**
* 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 可以理解路径和路由名称。
【讨论】:
【参考方案2】:没有内置的注销目标。你必须在你的处理程序中处理它。
第 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);
【讨论】:
这很完美!但是有人需要更新SecurityBundle Configuration。这会误导我使用 logout.target。 这也和这个问题很相似***.com/questions/21835509/…>.以上是关于symfony 注销目标从未应用的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4.4 Auth0 如何从应用程序中完全注销用户