====== 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'' Il se peux qu'une erreur de validation se produise ''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" dans ''App\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 }'' 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'' 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, [ ... ]), ], ]) ; } ====== Sources & Ressources ====== * [[https://symfony.com/doc/current/security.html]] * [[https://www.youtube.com/watch?v=Id5y2aRUZok|Vidéo Youtube : Une authentification MAGIQUE dans Symfony ! de Yoandev]] * [[https://www.youtube.com/watch?v=_GjHWa9hQic|Vidéo Youtube : 1H POUR COMPRENDRE L'AUTHENTIFICATION ! de Lior CHAMLA]] * [[https://www.youtube.com/watch?v=lkmW57JblzI|Vidéo Youtube : Une double authentification avec Symfony en 30 minutes ! Yoandev]]