Symfony,在控制器中强制注销
Posted
技术标签:
【中文标题】Symfony,在控制器中强制注销【英文标题】:Symfony, force logout in a controller 【发布时间】:2019-03-31 01:08:13 【问题描述】:我正在使用 Symfony 3.4,我想在我的控制器中的操作结束时注销我的用户。
这是动作
public function changeUserEmail()
/* change the user email */
/* perform the logout */
/* choose the route to redirect to */
return $this->redirectToRoute(/* some route choosen above */);
有没有办法以 Symfony 的方式实现/* perform the logout */
?我在文档中一无所获。
我确实想在控制器中注销(不想重定向到注销路径)并且我想选择要在控制器中重定向的路由。
非常感谢。
版本或 Symfony 是 3.4
【问题讨论】:
How can one force logout a user in Symfony?的可能重复 我认为您可以将安全上下文令牌设置为空,然后使会话无效。使用 php 时更像是一个 Laravel 人,但理论上这应该可以工作 【参考方案1】:这就是答案
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
// ...
public function changeUserEmail(TokenStorageInterface $tokenStorage)
/* change the user email */
$tokenStorage->setToken();
/* choose the route to redirect to */
return $this->redirectToRoute(/* some route choosen above */);
无需使所有会话无效,例如如果定义了多个防火墙。
【讨论】:
也使用 Symfony 4。 不确定这是否应该存在于控制器中。一些随机控制器将令牌存储设置为空似乎有点不合适?为什么不直接重定向到应用程序的注销处理程序? @James 因为我不能相信用户会遵循重定向这一事实,并且因为我确实想选择控制器内的路由。 是的,控制器应该决定发送到的最终路由。但是设置令牌属于身份验证或安全层,这是一个新类,可以在不同的地方调用以设置(或清空)用户的令牌 - 或使用应用程序的注销处理程序。如果您在注销或其他方面遇到随机问题/错误,则查看您的控制器以查看用户可能已注销的位置是很烦人的。以上是关于Symfony,在控制器中强制注销的主要内容,如果未能解决你的问题,请参考以下文章