====== Authentification (2) ====== Selon la vidéo de [[https://www.youtube.com/watch?v=wooIVmonymA|Nouvelle Techno]] ===== Création de l'entité USER ===== php bin/console make:entity User Fichiers créés : | src/Entity/**User**.php | | src/Repository/**UserRepository**.php | Ajout des propriétés : ^ Nom ^ Type ^ Longueur ^ Nullable ^ | email | string | 255 | Non | | username | string | 255 | Non | | roles | simple_array | | Non | | password | string | 255 | Non | ==== Note sur le champ ROLES ==== j'ai utilisé le type ''simple_array'' plutôt que le type ''json'' car sur mon serveur **MariaDB** le type de champ ''json'' n'était pas encore supporté, alors qu'en **MySQL** il existe depuis longtemps... Le champ dans la DB est du type **longtext** et son contenu doit être constitué de chaînes séparées par des virgules, par exemple ''ROLE_USER,ROLE_ADMIN''. Créer la migration : php bin/console make:migration Appliquer la migration : php bin/console doctrine:migrations:migrate ===== Implémenter UserInterface ===== Éditer la classe **App\Entity\User** pour qu'elle implémente l'interface **UserInterface** : // ... use Symfony\Component\Security\Core\User\UserInterface; class User implements UserInterface { // ... // Ajouter ou modifier les fonctions requises : //********************************************* public function getUsername(): ?string { return $this->username; } public function eraseCredentials() { } public function getSalt() { } public function getRoles() { $roles = $this->roles; // guarantee every user at least has ROLE_USER $roles[] = 'ROLE_USER'; return array_unique($roles); } } ===== Création du système d'authentification ===== php bin/console make:auth Choisir **Login form authenticator**. Nom de la classe à créer : **UsersAuthenticator** Nom du contrôleur : **SecurityController** Nom de la classe User : **App\Entity\User** Choisir le champ de l'entité qui sera entré comme login : **email** ou **username** Générer une route ''/logout'' ? **Oui** * Création de ''src/Security/UsersAuthenticator.php'' * Mise à jour de la configuration dans ''config/packages/security.yaml'' * Création du contrôleur ''src/Controller/SecurityController.php'' * et de son template ''login.html.twig'' ===== Formulaire d'inscription ===== php bin/console make:registration-form Ajouter une contrainte d'unicité sur la classe **Users** : **Oui** Authentifier automatiquement l'utilisateur après l'inscription : **Oui** * Mise à jour de l'entité ''src/Entity/Users.php'' * Création du formulaire d'inscription dans ''src/Form/RegistrationFormType.php'' * Création du contrôleur ''src/Controller/RegistrationController.php'' * et de son template ''register.html.twig''