Symfony 2.8 FOSUserBundle在注销时删除cookie

时间:2017-06-09 10:37:37

标签: symfony fosuserbundle

我需要在用户退出时删除一些额外的Cookie。 我该怎么做?

enter image description here

我在config.yml中有这个

unsafeRead

但是“delete_cookies”选项不起作用。 我也有退出处理程序以防万一。我不知道该写些什么。

1 个答案:

答案 0 :(得分:2)

确保您的配置位于其中一个防火墙部分下的 security.yml 文件中,并以full security configuration for 2.8结帐作为参考:

# app/config/security.yml
security:
    firewalls:
        somename:
            logout:
                delete_cookies:
                    a: { path: null, domain: null }
                    b: { path: null, domain: null }
                handlers: [some.service.id, another.service.id]
                success_handler: some.service.id
            anonymous: ~

正如您在注销成功处理程序中提到的,您可以执行一些额外的处理:

  

如果您在退出后需要做一些更有趣的事情,那么   可以通过添加success_handler键来指定注销成功处理程序   并将其指向实现的类的服务ID   LogoutSuccessHandlerInterface。请参阅安全配置参考。

查看\Symfony\Component\Security\Http\Logout\CookieClearingLogoutHandler,通过响应标题删除所有请求的Cookie

/**
 * Implementation for the LogoutHandlerInterface. Deletes all requested cookies.
 *
 * @param Request        $request
 * @param Response       $response
 * @param TokenInterface $token
 */
public function logout(Request $request, Response $response, TokenInterface $token)
{
    foreach ($this->cookies as $cookieName => $cookieData) {
        $response->headers->clearCookie($cookieName, $cookieData['path'], $cookieData['domain']);
    }
}

因此,在你的处理程序中你可以做类似的事情:

$response = new Symfony\Component\HttpFoundation\Response();
$response->headers->clearCookie('nameOfTheCookie');
$response->send();