Selon la vidéo de Nouvelle Techno
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 |
---|---|---|---|
string | 255 | Non | |
username | string | 255 | Non |
roles | simple_array | Non | |
password | string | 255 | Non |
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
É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); } }
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
src/Security/UsersAuthenticator.php
config/packages/security.yaml
src/Controller/SecurityController.php
login.html.twig
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
src/Entity/Users.php
src/Form/RegistrationFormType.php
src/Controller/RegistrationController.php
register.html.twig