Symfony2: hvordan du logger brukeren ut manuelt i kontrolleren?

stemmer
41

Jeg ønsker å gjøre noe sånt i kontrolleren til å logge brukeren ut:

$user = $this->get('security.context')->getToken()->getUser();
$user->logOut();
Publisert på 24/06/2011 klokken 07:34
kilden bruker
På andre språk...                            


4 svar

stemmer
70

Utlogging i Symfony2 håndteres av såkalte utlogging handler som er bare et lister som kjøres når URL kamp mønster fra sikkerhetskonfigurasjon, altså. Hvis URL er la oss si /logoutda denne lytteren blir utført. Det er to bygge-utlogging teleskopisk:

  1. CookieClearingLogoutHandler som bare sletter alle cookies.
  2. SessionLogoutHandler som opphever økten

Alt du trenger å gjøre er det samme det siste man gjør. Du kan oppnå det ved å ringe:

Legacy Symfony

$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();

Symfony 2,6

$this->get('security.token_storage')->setToken(null);
$this->get('request')->getSession()->invalidate();

Advarsel

Dette vil bare fungere når husker meg funksjonalitet er deaktivert. I andre tilfeller vil brukeren bli logget inn tilbake igjen ved hjelp av en huske meg cookie med neste forespørsel.

Vennligst vurdere utvidet løsning hvis du bruker husker meg funksjonalitet: https://stackoverflow.com/a/28828377/1056679

Svarte 25/06/2011 kl. 00:21
kilden bruker

stemmer
8

Vi må sette brukeren som en anonym bruker når du logger ut. Da kan vi bruke
$token->getUser()->getRoles();i kontrolleren eller {% if is_granted('ROLE_USER') %}i kvisten malen.

use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
...
//$providerKey = $this->container->getParameter('fos_user.firewall_name');
$token = new AnonymousToken($providerKey, 'anon.');
$this->get('security.context')->setToken($token);
$this->get('request')->getSession()->invalidate();
Svarte 04/01/2014 kl. 08:07
kilden bruker

stemmer
6

Ugyldigbrukerøkten kan føre til at noen uønskede resultater. Symfony brannmur har en lytter som sjekker og oppdaterer brukerens token alltid. Du kan bare gjøre en omdirigering til standard utlogging rute som du har angitt i firewall.yml

I Controller kan du gjøre dette:

$this->redirect( $this->generateUrl( 'your_logout_url' ) );

hvis du ikke vet navnet på utlogging ruten. Du kan sjekke det i konsollen:

app/console router:match /logout

denne kommandoen vil gi deg rutenavnet som du trenger.

:)

Svarte 06/03/2014 kl. 11:45
kilden bruker

stemmer
1

Hvis RememberMe funksjonaliteten er aktivert for området du bør også rent RememberMe cookie:

    $this->get('security.context')->setToken(null);
    $this->get('request')->getSession()->invalidate();

    $response = new RedirectResponse($this->generateUrl('dn_send_me_the_bundle_confirm', array(
                'token' => $token
                )));
    // Clearing the cookies.
    $cookieNames = [
        $this->container->getParameter('session.name'),
        $this->container->getParameter('session.remember_me.name'),
    ];
    foreach ($cookieNames as $cookieName) {
        $response->headers->clearCookie($cookieName);
    }
Svarte 01/04/2015 kl. 10:25
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more