5 - Inscription et Authentification des utilisateurs (Symfony 7)

Temps de lecture : 12 minutes environ.

Bienvenue dans ce cinquième tutoriel de notre série Symfony 7. Nous allons aborder l'inscription et l'authentification des utilisateurs, en créant les formulaires de connexion et d'inscription pour notre blog OpenBlog.

Mise en Place des Formulaires d'Authentification

Création du Formulaire de Connexion

1. Utilisation du Maker Bundle :

Ouvrez votre terminal et exécutez la commande suivante pour créer l'authentificateur utilisateur :

symfony console make:auth

ATTENTION : depuis l'écriture de ce tutoriel, make:auth a été déprécié et remplacé par la commande security (Security (Symfony Docs))

2. Options de l'Assistant :

Choisissez les options suivantes lorsque l'assistant vous les propose :

  • Créer un formulaire de connexion (option 1).
  • Nom de la classe : UsersAuthenticator
  • Nom du contrôleur : SecurityController
  • Ajouter une route de déconnexion : yes
  • Ajouter le support du "Remember Me" : yes

Cette commande génère plusieurs fichiers, y compris UsersAuthenticator.php dans src/Security, SecurityController.php dans src/Controller, et login.html.twig dans templates/security.

3. Configuration de Security.yaml :

Le fichier config/packages/security.yaml a été mis à jour pour inclure l'authentificateur et les routes de connexion et de déconnexion. Vérifiez que les modifications sont correctes.

Personnalisation du Formulaire de Connexion

1. Modifiez login.html.twig dans templates/security pour personnaliser le formulaire de connexion :

{% extends 'base.html.twig' %}

{% block title %}Me connecter{% endblock %}

{% block body %}
<h1>Me connecter</h1>
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('app_login') }}" method="post">
<div>
<label for="inputNickname">Pseudo</label>
<input type="text" id="inputNickname" name="_nickname" value="{{ last_username }}" required autofocus>
</div>
<div>
<label for="inputPassword">Mot de passe</label>
<input type="password" id="inputPassword" name="_password" required>
</div>
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
<button type="submit">Me connecter</button>
</form>
<p><a href="{{ path('app_register') }}">Pas encore inscrit ? M'inscrire</a></p>
<p><a href="{{ path('app_forgot_password') }}">Mot de passe oublié</a></p>
{% endblock %}

2. Configurer la Redirection après Connexion :

Dans UsersAuthenticator.php, remplacez le TODO dans la méthode onAuthenticationSuccess par une redirection vers la page d'accueil :

public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
{
return new RedirectResponse($this->urlGenerator->generate('app_home'));
}

Création du Formulaire d'Inscription

1. Utilisation du Maker Bundle :

Ouvrez votre terminal et exécutez la commande suivante pour créer le formulaire d'inscription :

symfony console make:registration-form

2. Options de l'Assistant :

Choisissez les options suivantes :

  • Entité de l'utilisateur : Users
  • Ajouter une contrainte UniqueEntity pour s'assurer que les utilisateurs sont uniques : yes
  • Ajouter un email de vérification : no
  • Authentifier automatiquement après l'inscription : yes

Cette commande génère plusieurs fichiers, y compris RegistrationController.php dans src/Controller, RegistrationFormType.php dans src/Form, et register.html.twig dans templates/registration.

3. Personnalisation du Formulaire d'Inscription :

Modifiez register.html.twig pour correspondre à votre formulaire d'inscription :

   {% extends 'base.html.twig' %}

{% block title %}M'inscrire{% endblock %}

{% block body %}
<h1>M'inscrire</h1>
{{ form_start(registrationForm) }}
{{ form_row(registrationForm.nickname) }}
{{ form_row(registrationForm.email) }}
{{ form_row(registrationForm.plainPassword, {
label: 'Mot de passe'
}) }}
{{ form_row(registrationForm.agreeTerms) }}
<button type="submit">M'inscrire</button>
{{ form_end(registrationForm) }}
<p><a href="{{ path('app_login') }}">Déjà inscrit ? Me connecter</a></p>
{% endblock %}

Validation des Champs et Sécurité

Assurez-vous que tous les champs requis sont correctement validés et que les contraintes de sécurité sont en place. Vous pouvez ajouter des contraintes supplémentaires dans RegistrationFormType.php et configurer les messages d'erreur appropriés.

Conclusion

Nous avons vu comment créer et personnaliser les formulaires de connexion et d'inscription pour notre projet OpenBlog. En utilisant le Maker Bundle de Symfony, nous avons pu rapidement mettre en place ces fonctionnalités essentielles. Dans les prochains tutoriels, nous continuerons à améliorer la sécurité et à ajouter de nouvelles fonctionnalités à notre blog multi-auteur.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat.

5 - Inscription et Authentification des utilisateurs (Symfony 7)
Article publié le

Catégories : Symfony Symfony 7

Mots-clés : Utilisateurs Symfony inscription authentification user connexion auth Symfony 7

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn