Inloggen

De inlog pagina

Net als het registratie formulier heeft Symfony ook een ingebouwd commando voor het maken van een login pagina. Voer het commando symfony console make:security:form-login uit.

Als alles goed is, krijg je de volgende vragen.

# symfony console make:security:form-login

 Choose a name for the controller class (e.g. SecurityController) [SecurityController]:
 > SecurityController

 Do you want to generate a '/logout' URL? (yes/no) [yes]:
 >

 created: src/Controller/AuthenticationController.php
 created: templates/authentication/login.html.twig
 updated: config/packages/security.yaml


  Success!


 Next: Review and adapt the login template: authentication/login.html.twig to suit your needs.

Aanpassen van de inlog pagina

De webapplicaties die wij bouwen zijn voor Nederlandse gebruikers. Dit betekent dat je het gemaakte twig

Open het bestand templates/security/login.html.twig. In de basis zal je zien dat deze net iets anders met het formulier werkt dan de registration.html.twig of als je met {{form(form) }} hebt gewerkt. De teksten en HTML/CSS kan je zelf aanpassen.

Sla de pagina op en surf naar http://localhost:8000/login en probeer in te loggen met de gegevens die je in de registration-pagina gemaakt hebt.

Landing page per rol

Wanneer je bent ingelogd word je standaard doorgestuurd naar het pad '/', ok wel de root genoemd. Vaak heb je een HomeController waar je een route in hebt zitten voor het pad '/'. Wanneer je de gebruiker wil doorsturen naar een specifieke pagina aan hand van de rol die een gebruiker heeft kun je de volgende code daarvoor gebruiken:

            
//route voor het pad '/' ook wel de root genoemd
#[Route('/', name: 'home')]
public function home(): Response
{
    //wanneer je de rol 'ROLE_STUDENT' hebt wordt de student pagina getoond.
    if ($this->isGranted('ROLE_STUDENT')){
        return $this->render('student/index.html.twig');
    }
    //wanneer je de rol 'ROLE_TEACHER' hebt wordt de teacher pagina getoond.
    if ($this->isGranted('ROLE_TEACHER')){
        return $this->render('teacher/index.html.twig');
    }
    //heb je geen rol wordt je naar de standaard landing pagina gestuurd, in dit geval de guest pagina.
    return $this->render('guest/index.html.twig');
}
        

Uitloggen

Als je bovenstaande stappen goed doorlopen hebt staat er in de SecurityController ook een route voor het uitloggen. Deze ziet er als volgt uit.

#[Route(path: '/logout', name: 'app_logout')]
public function logout(): void
{
    throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
Als je de Exception leest mag deze route verder leeg zijn omdat het door de firewall van Symfony afgevangen/ opgelost worden.

Denk aan je layout!

Als de registratie en inlog pagina's gemaakt zijn is het natuurlijk van belang dat je in jouw applicatie de pagina's aanpast. Bijvoorbeeld in het menu. Als een gebruiker nog niet is ingelogd maak je een inloggen link in het menu. Is een gebruiker wel ingelogt toon je zijn naam om te tonen dat de gebruiker ingelogd is.