Authentification
Prérequis
- La sécurité doit etre installée :
symfony composer req security
Utilisateurs
Création
Création de l'entité USER :
symfony console make:user
Puis pour créer les tables dans la base de données :
symfony console make:migration
symfony console doctrine:migrations:migrate
Formulaire d'enregistrement de nouveaux utilisateurs
Pour créer ce formulaire :
symfony console make:registration-form
Cela nous créé plusieurs fichiers :
- Un contrôleur :
src\Controller\RegistrationController.php
- Un Formulaire :
src\Form\RegistrationFormType.php
- Un modèle Twig :
templates\registration\register.html.twig
data.password This value should not be null.
Voir en bas de la page pour en savoir plus
Formulaire de connexion
symfony console make:auth
Une fois que les fichiers sont générés ou modifiés il faut :
- Definir la redirection aprés authentification dans le fichier
App\Security\AppAuthenticator
voir la parite “TODO” dansApp\Security\AppAuthenticator::onAuthenticationSuccess()
- Modifié le modèle :
templates/security/login.html.twig
.
Protéger un chemin
Pour interdire l’accès a un chemin sauf au utilisateurs authentifié, on modifie le fichier config\packages\security.yaml
On décommente la ligne - { path: ^/admin, roles: ROLE_ADMIN }
- config\packages\security.yaml
access_control: - { path: ^/admin, roles: ROLE_ADMIN } #<- a décommenter # - { path: ^/profile, roles: ROLE_USER }
Connexion par lien
On peut se connecter directement via un lien que l'on a reçu par email, par exemple.
Voir la vidéo : https://www.youtube.com/watch?v=Id5y2aRUZok
Erreurs
Formulaire de d'enregistrement
Erreur data.password This value should not be null.
Il faut ajouter la ligne →add('password',HiddenType::class,['attr'⇒['value'⇒'dummy']])
dans le fichier \Form\RegistrationFormType.php
- src\Form\RegistrationFormType.php
public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('email') .... ->add('password',HiddenType::class,['attr'=>['value'=>'dummy']]) #<--- AJOUTER CETTE LIGNE ->add('plainPassword', PasswordType::class, [ ... ]), ], ]) ; }