Il faut savoir que depuis Laravel 8, le framework propose 3 "starter kits" pour l'authentification :
Mais je choisis lequel moi ?
Voyons les différences entre chaque :
- Laravel Jetstream est un pack très complet intégrant déjà un design travaillé basé sur des technologies puissantes et très récentes (Inertia + VueJS, Livewire + Blade). C'est un peu trop pour notre application et pour notre niveau !
- Laravel Fortify quant à lui est plus minimaliste, il se contente de nous donner les derrières de l'authentification mais aucune vue, route etc... C'est vraiment le moteur d'une voiture sans châssis, volant, roues...
- Laravel Breeze est le kit que nous allons utiliser. Conseillé pour les débutants, très simple, il nous donne tout ce qu'il faut pour gérer automatiquement :
- L'inscription
- La connexion
- La déconnexion
- L'oubli de mot de passe
L'installation de Laravel Breeze
Laravel Breeze donne des fonctionnalités backend pour gérer l'authentification et aussi des vues. Ainsi, nous aurons besoin d'utiliser nos 2 gestionnaires de paquets backend et frontend favoris : composer et npm.
Premièrement, installons la partie back de Laravel Breeze. Place-toi à la racine du projet dans ton terminal et tape :
{"language":"application/x-httpd-php","content":"composer require laravel/breeze --dev","filename":"console"}
Puis :
{"language":"shell","content":"php artisan breeze:install","filename":"console"}
Ensuite, utilisons npm pour installer les dépendances et compiler nos assets :
{"language":"application/x-httpd-php","content":"npm install && npm run dev","filename":"console"}
Et c'est tout.
C'est tout ? Tu veux dire que j'ai un système d'authentification qui fonctionne parfaitement ?
Tout à fait. Va sur ton navigateur et regarde les pages /register, /login de ton application par exemple. Tu peux les essayer et te créer un compte, tout fonctionne. Enfin presque tout... Seule la fonctionnalité de modification de mot de passe (mot de passe oublié) ne marche pas correctement. En effet, il faut au préalable renseigner les informations liées au serveur d'email qui enverra les emails de reset de mot de passe. Où cela peut-il se faire selon toi ?
Dans le dossier de config ?
Presque. En réalité, le fichier "mail.php" du dossier de config fait référence à des variables directement inscrites dans le .env. On a donc juste à modifier le .env.
La partie concernée est la suivante :
{"language":"application/x-httpd-php","content":"MAIL_MAILER=smtp\nMAIL_HOST=smtp.mailtrap.io\nMAIL_PORT=2525\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\nMAIL_ENCRYPTION=null\nMAIL_FROM_ADDRESS=null\nMAIL_FROM_NAME=\"${APP_NAME}\"","filename":".env"}
Tu dois remplacer toutes ces informations par les identifiants de ton serveur de mail.
MAIL_FROM_ADDRESS correspondra à l'adresse email qui enverra les emails de ton application si aucune autre n'est spécifiée
MAIL_FROM_NAME correspondra au nom qui s'affichera sur les emails envoyés
Ces deux champs sont peut être un peu moins explicites que les précédents donc je me permets de te les expliquer.
Également, si tu essaies de te connecter tu remarqueras que tu es redirigé automatiquement sur un tableau de bord. Ce n'est pas le comportement souhaité dans le cadre de notre application. Effectivement, une fois connecté, on veut juste rediriger nos membres sur l'accueil : seuls les administrateurs pourront accéder au panneau d'administration.
Pour modifier ce comportement, rendez-vous dans app -> providers -> RouteServiceProvider.php et changeons la valeur de la constante home comme suit :
{"language":"application/x-httpd-php","content":"<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\RateLimiter;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass RouteServiceProvider extends ServiceProvider\n{\n /**\n * The path to the \"home\" route for your application.\n *\n * This is used by Laravel authentication to redirect users after login.\n *\n * @var string\n */\n public const HOME = '/';\n\t\n\t// Reste du code\n}","filename":"RouteServiceProvider.php"}
Super ! C'est vraiment simple.
En effet. Cependant, attention. Tout fonctionne bien car nous avons une application classique, c'est à dire qu'on veut authentifier un utilisateur avec un couple email/mot de passe et que notre table users en base de données suit la même forme que celle proposée de base par Laravel. Si on avait changé ça (le nom du champ email par exemple), on aurait du faire quelques modifications à la main. D'ailleurs, tu auras peut être remarqué que plusieurs fichiers sont apparus après avoir réaliser le composer require.
- Le dossier "Auth" dans les contrôleurs : c'est notamment dans ce dossier qu'on devrait faire des modifications si besoin
- Le fichier auth.php dans les routes
- Le dossier "auth" dans les views dans les resources : pour modifier le design des pages
- Toutes les dépendances de vendor et node_modules
Bilan de cette partie :
- On peut partir de 3 starter kits pour gérer l'authentification sur Laravel (Breeze, Fortify, Jetstream)
- L'authentification est très simple à gérer dans des cas de sites classiques
- On doit modifier les données liées au serveur de mail dans le .env pour que la réinitialisation de mot de passe fonctionne
Offre valable jusqu'au 20 février sur l'assistance training-dev : tu bénéficieras de 15min offertes pour toute assistance de 30min au moins ;). Il suffira de mettre le lien de cette page directement dans ta demande d'assistance !
- On peut partir de 3 starter kits pour gérer l'authentification sur Laravel (Breeze, Fortify, Jetstream)
- L'authentification est très simple à gérer dans des cas de sites classiques
- On doit modifier les données liées au serveur de mail dans le .env pour que la réinitialisation de mot de passe fonctionne
Offre valable jusqu'au 20 février sur l'assistance training-dev : tu bénéficieras de 15min offertes pour toute assistance de 30min au moins ;). Il suffira de mettre le lien de cette page directement dans ta demande d'assistance !
Nous allons maintenant commencer à rentrer dans les parties les plus "intéressantes" : la manipulation des contrôleurs, des vues, des routes pour réaliser le coeur de notre application !
J'ai terminé cette partie