MBO-SD : De site voor software developer in het MBO
Registereren van gebruikers
Controleer de User.php entity
Controleer als eerste of de package PasswordAuthenticatedUserInterface
in de use
space staat. Hier onder vind je hoe (ongeveer) de src/entity/User.php
er ongeveer uit zou moeten
zien.
// ...
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
Als de start van de src/Entity/User.php
deze regels laat zien, ben je goed op weg!
Het registratie formulier en de RegistrationController
Om je als gebruiker te kunnen registeren hebben we twee bestanden/ oplossingen nodig. Voor de routes van het
inloggen gebruiken we de RegistrationController
en voor het registreren zelf maken we een
registratiepagina
aan in de templates map. Om je hierbij te helpen heb je de volgende twee
commando's nodig.
composer require symfonycasts/verify-email-bundle
Dit heb je nodig als je zou willen werken met email verificatie emails. Dit gaan we voor nu nog niet doen, maar
het is handig om deze alvast geinstalleerd te hebben.
symfony console make:registration-form
Na dit commando krijg je een aantal vragen, zie hier onder hoe je die het beste kan beantwoorden/ wat je kan doen.
LET OP! Bij de vraag Do you want to send an email to verify the user's email address after registration? (yes/no) [yes]:
kies je niet voor het standaaard antwoord maar je kiest voor no
. In deze uitleg en in jouw omgeving
is het nog niet mogelijk of nodig dat er een email verificatie mail gestuurd wordt.
LET OP 2! Bij de vraag What route should the user be redirected to after registration?:
dien je goed naar de routes te kijken en een juiste route te kiezen waar gebruikers naar toe gestuurd worden nadat
zij geregistreerd zijn!
LET OP 3! Bij de vraag of je een UniqueEntity wilt gebruiken kies je ja! Dit
is de vraag Do you want to add a #[UniqueEntity] validation attribute to your User class to make sure
duplicate accounts aren't created? (yes/no) [yes]:
De reden hiervoor is dat je namelijk niet wilt dat
een gebruiker met hetzelfde email adres meerdere keren in jouw systeem staat.
symfony console make:registration-form
Creating a registration form for App\Entity\User
Do you want to add a #[UniqueEntity] validation attribute to your User class to make sure duplicate accounts aren't created? (yes/no) [yes]:
> yes
Do you want to send an email to verify the user's email address after registration? (yes/no) [yes]:
> no
Do you want to automatically authenticate the user after registration? (yes/no) [yes]:
> yes
! [NOTE] No authenticators found - so your user won't be automatically authenticated after registering.
What route should the user be redirected to after registration?:
[0 ] _preview_error
[1 ] _wdt
[2 ] _profiler_home
[3 ] _profiler_search
[4 ] _profiler_search_bar
[5 ] _profiler_phpinfo
[6 ] _profiler_xdebug
[7 ] _profiler_font
[8 ] _profiler_search_results
[9 ] _profiler_open_file
[10] _profiler
[11] _profiler_router
[12] _profiler_exception
[13] _profiler_exception_css
[14] app_index
> 14
updated: src/Entity/User.php
created: src/Form/RegistrationFormType.php
created: src/Controller/RegistrationController.php
created: templates/registration/register.html.twig
Success!
Als je zelf een gebruiker in de database wilt invoeren (bijvoorbeeld via PHPMyAdmin)
dan kan je
een gekozen wachtwoord ook via de terminal laten hashen met het volgende commando:
symfony console security:hash-password
Voor nu is het niet nodig, we gaan direct met de registratie-pagina aan de gang.
Als je nu naar jouw applicatie gaat, lokaal op bijvoorbeeld http://localhost:8000/register
zal je
de registratiepagina te zien krijgen.
De registratie pagina aanpassen
Als je de vorige stappen goed doorlopen hebt zijn er drie nieuwe bestanden gemaakt en is er een geupdate.
Aan het einde van het make:registration-form
commando zal Symfony het volgende gemeld hebben:
updated: src/Entity/User.php
created: src/Form/RegistrationFormType.php
created: src/Controller/RegistrationController.php
created: templates/registration/register.html.twig
User
entity dan moet je
die velden ook toevoegen aan de registratie pagina. Daarvoor kan je het bestand templates/registration/register.html.twig
naar hartelust aanpassen.
BELANGRIJK! Pas de RegistrationController aan
Het lijkt erop dat er een foutje in Symfony zit met het aanmaken van het registratie formulier. Hierdoor worden
de standaard fouten niet getoond in het formulier. Hiervoor dien je een kleine aanpassing te maken in de
RegistrationController
.
Aan het einde van de register
methode (function) bij de return $this->render(...
staat nu:
'registrationForm' => $form->createView(),
De createView()
property moet weg, je moet alleen $form
door sturen.
return $this->render('registration/register.html.twig', [
'registrationForm' => $form,
]);