Création d’un système d’authentification (login & registration) en utilisant Symfony 6:

Naamen Mohamed Amine
3 min readJan 10, 2023

--

Symfony 6 est un framework PHP populaire pour le développement web. Il offre une variété de fonctionnalités pour faciliter le développement d’applications, notamment l’authentification. Dans cet article, nous allons vous montrer comment créer un système d’authentification pour votre application en utilisant Symfony 6. Nous allons couvrir les étapes nécessaires pour créer un formulaire d’inscription, gérer l’authentification des utilisateurs et sécuriser les routes.

Préparation de l’environnement

Avant de commencer, assurez-vous d’avoir installé Symfony 6 sur votre ordinateur. Vous pouvez le télécharger à partir de leur site web officiel. Ensuite, vous pouvez créer un nouveau projet en utilisant la commande suivante:

symfony new myproject

Une fois que le projet est créé, vous devrez configurer la base de données. Ouvrez le fichier .env situé à la racine de votre projet et configurez les informations de connexion de votre base de données.

Création d’un formulaire d’inscription

Pour créer un formulaire d’inscription, utilisez la commande Symfony suivante :

symfony make:registration-form

Cette commande va générer les fichiers nécessaires pour votre formulaire d’inscription dans le répertoire “src/Form/”. Vous pouvez personnaliser le formulaire en ajoutant des champs supplémentaires ou en utilisant les outils de validation de Symfony 6. Pour traiter les données soumises, vous devrez créer un contrôleur qui gère l’enregistrement des tilisateurs dans la base de données. Voici un exemple de comment cela pourrait être fait:

use App\Entity\User;
use App\Form\RegistrationFormType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class RegistrationController extends AbstractController
{
/*
*@Route("/register", name="app_register")
*/
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('plainPassword')->getData()
)
);

$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();

// do anything else you need here, like send an email

return $this->redirectToRoute('app_login');
}

return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);

}
}

Mise en place de l’authentification

Une fois que les utilisateurs ont été enregistrés, vous pouvez configurer l’authentification en utilisant l’authentificateur par défaut de Symfony 6. Vous pouvez également personnaliser cet authentificateur pour gérer le cryptage des mots de passe. Enfin, vous devrez créer une vue pour l’écran de connexion. Voici un exemple de comment cela pourrait être fait :

<?php
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class SecurityController extends AbstractController
{
/**
* @Route("/login", name="app_login")
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();

return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error
]);
}

/**
* @Route("/logout", name="app_logout")
*/
public function logout()
{
// controller can be blank: it will never be executed!
throw new \Exception('Don\'t forget to activate logout in security.yaml');
}
}

Sécurisation des routes

Enfin, pour protéger les pages sensibles, vous pouvez utiliser les contrôleurs de sécurité de Symfony 6. Vous pouvez également personnaliser les règles de sécurité pour restreindre l’accès aux utilisateurs non authentifiés. Vous pouvez utiliser les annotations Route pour sécuriser les routes comme ceci :

<?php
/**
@Route("/admin", name="admin_dashboard")
@IsGranted("ROLE_ADMIN")
*/
public function adminDashboard() {
// dashboard logic for administrators
}

Conclusion

Nous avons vu comment créer un système d’authentification pour votre application en utilisant Symfony 6. Nous avons couvert les étapes nécessaires pour créer un formulaire d’inscription, gérer l’authentification des utilisateurs et sécuriser les routes. Il est important de noter que cet article est un guide général et qu’il peut varier en fonction des besoins de votre application. Il est toujours préférable de consulter la documentation officielle de Symfony pour des informations plus détaillées sur les différentes fonctionnalités.

--

--