====== 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]]