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