Utilisateurs et sécurité
Entité User, formulaires de connexion et d'inscription, contrôle d'accès et utilisateur connecté en Twig.
Durant cet atelier, nous allons configurer la gestion des utilisateurs et la sécurité dans notre application Symfony.
À savoir
La plupart de l'atelier sera fait en live-coding. Pensez à bien prendre des notes pour vous y référer plus tard !
Prérequis
Avant de pouvoir traiter les aspects de sécurité, nous allons devoir installer les composants nécessaires pour intégrer une base de donnée à notre application.
Astuce
Nous n'allons pour l'instant qu'installer les composants, nous verrons l'aspect base de donnée dans un futur atelier ; mais les utilisateurs étant stockés en base de données, il est important de préparer cette étape.
Consigne
- Ouvrez le fichier
composer.json, et, dans la sectionconfig, modifiez la pour correspondre à ceci :
"config": {
"allow-plugins": {
"php-http/discovery": true,
"symfony/flex": true,
"symfony/runtime": true
},
"bump-after-update": true,
"sort-packages": true,
"platform": {
"php": "8.3.28"
}
},- Installez l'ORM Pack dans votre projet. Documentation : https://symfony.com/doc/current/doctrine.html
- Regardez vos fichiers
docker-compose.ymlet.envet observez ce qu'il s'est passé lors de l'installation du pack. - Dans le fichier
.env, changez la variableDATABASE_URLpour modifier le host endatabase(le nom du service dans Docker). - Redémarrez vos conteneurs Docker pour appliquer les changements :
docker compose down && docker compose up -d.
Configuration de la sécurité
Création du formulaire de login/logout
Consigne
- Installez le pack de sécurité Symfony. Documentation : https://symfony.com/doc/current/security.html
- Utilisez la commande
symfony console make:userpour créer une entitéUseravec comme champ identifiant l'email. - Synchronisez la base de donnée avec vos entity en utilisant la commande
symfony console doctrine:schema:update --force --dump-sql. - Utilisez la commande
symfony console make:security:form-loginpour générer un système de login/logout.
Vous pouvez maintenant customisez la page de login générée pour qu'elle corresponde au design de votre application.
Création du formulaire d'inscription
Consigne
- Utilisez la commande
symfony console make:registration-formpour générer un système d'inscription, sans envoi d'email, et qui redirige vers la page de login après inscription.
Vous pouvez maintenant customisez la page d'inscription générée pour qu'elle corresponde au design de votre application.
Consigne
- Testez l'inscription, le login et le logout de votre application.
Astuce
Vous remarquerez sans doute que le login vous redirige vers la page d'accueil après connexion.
Vous pouvez modifier ce comportement en modifiant le fichier security.yaml, dans la section firewalls > main > form_login, vous pouvez ajouter la clé default_target_path avec comme valeur la route vers laquelle vous souhaitez rediriger l'utilisateur après connexion (exemple : default_target_path: app_wallets_list).
Astuce
Vous devrez sans doute modifier votre menu pour que le bouton de déconnexion mène bien à la route de déconnexion.
Protection des routes
Consigne
- Modifiez le fichier
security.yamlpour protéger les routes via le bloc de configurationaccess_controlcomme suit :- La route
/doit être accessible à tous. (rôlePUBLIC_ACCESS) - Les routes
/loginet/registerdoivent être accessibles à tous. (rôlePUBLIC_ACCESS) - Toutes les autres routes doivent être accessibles uniquement aux utilisateurs authentifiés. (rôle
IS_AUTHENTICATED_FULLY)
- La route
Astuce
Vous pouvez vous reporter aux instructions dans le fichier security.yaml où à la documentation https://symfony.com/doc/7.4/security.html#access-control-authorization.
Récupération de l'utilisateur connecté
Consigne
- Dans le menu de navigation, affichez l'email de l'utilisateur connecté. Vous pouvez utiliser la variable globale
appde Twig pour accéder à l'utilisateur courant viaapp.user. Documentation : https://symfony.com/doc/current/templates.html#the-app-global-variable