Skip to content

Instantly share code, notes, and snippets.

@sergeyfedotov
Last active February 9, 2017 13:48
Show Gist options
  • Select an option

  • Save sergeyfedotov/79e7cdf8ce4a960e5be1147417676ffb to your computer and use it in GitHub Desktop.

Select an option

Save sergeyfedotov/79e7cdf8ce4a960e5be1147417676ffb to your computer and use it in GitHub Desktop.
[Symfony][Security] Logout in stateless firewall

[Symfony][Security] Logout in stateless firewall

Temporary fix for the issue symfony/symfony#7104 in case of stateless firewall

security:
firewalls:
main:
stateless: true
anonymous: ~
form_login:
login_path: login
check_path: login
remember_me:
secret: "%kernel.secret%"
lifetime: 2592000
always_remember_me: true
# ...
<?php
namespace AppBundle\Action\Security;
use AppBundle\Http\ResponseFactory;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\RememberMe\AbstractRememberMeServices;
class LogoutAction
{
private $tokenStorage;
private $rememberMeServices;
private $responseFactory;
public function __construct(
TokenStorageInterface $tokenStorage,
AbstractRememberMeServices $rememberMeServices,
ResponseFactory $responseFactory
)
{
$this->tokenStorage = $tokenStorage;
$this->rememberMeServices = $rememberMeServices;
$this->responseFactory = $responseFactory;
}
/**
* @Route("/logout", name="logout")
*/
public function __invoke(Request $request)
{
$response = $this->responseFactory->redirectToRoute('index');
if (null !== $token = $this->tokenStorage->getToken()) {
$this->rememberMeServices->logout($request, $response, $token);
}
return $response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment