MBO-SD : De site voor software developer in het MBO
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.