Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
symfony4:authentification_2 [2020/04/12 20:39] marclebrun [Création du système d'authentification] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Authentification (2) ====== | ||
- | |||
- | Selon la vidéo de [[https://www.youtube.com/watch?v=wooIVmonymA|Nouvelle Techno]] | ||
- | |||
- | ===== Création de l'entité USER ===== | ||
- | |||
- | <code bash> | ||
- | php bin/console make:entity User | ||
- | </code> | ||
- | |||
- | 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** : pour 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... | ||
- | |||
- | Créer la migration : | ||
- | |||
- | <code bash> | ||
- | php bin/console make:migration | ||
- | </code> | ||
- | |||
- | Appliquer la migration : | ||
- | |||
- | <code bash> | ||
- | php bin/console doctrine:migrations:migrate | ||
- | </code> | ||
- | |||
- | ===== Implémenter UserInterface ===== | ||
- | |||
- | Éditer la classe **App\Entity\User** pour qu'elle implémente l'interface **UserInterface** : | ||
- | |||
- | <code php src/Entity/User.php> | ||
- | // ... | ||
- | |||
- | 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); | ||
- | } | ||
- | | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | ===== Création du système d'authentification ===== | ||
- | |||
- | <code bash> | ||
- | php bin/console make:auth | ||
- | </code> | ||
- | |||
- | 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 ===== | ||
- | |||
- | <code bash> | ||
- | php bin/console make:registration-form | ||
- | </code> | ||
- | |||
- | 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'' | ||
- | |||