Vérifier si un utilisateur est connecté

Dans le tutoriel précédent nous avions créé une nouvelle page /mon-compte. Cette page est accessible à tout le monde alors qu'elle devrait être réservée aux utilisateurs connectés. Nous allons voir pour protéger cette page et rediriger vers la page de connexion si la personne n'est pas connectée.

Création d'un contrôleur

La route est pour le moment une simple vue avec Route::view(). Nous allons transformer cette route pour utiliser un contrôleur.

Route::get('/mon-compte', 'CompteController@accueil');

Puis créer le contrôleur dans app/Http/Controllers/CompteController.php avec php artisan make:controller CompteController :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CompteController extends Controller
{
    public function accueil()
    {
        return view('mon-compte');
    }
}

Nous pouvons maintenant ajouter le code nécessaire pour rediriger la personne si elle n'est pas connectée.

Vérifier si une personne est connectée

Le système d'authentification de Laravel nous fournit plusieurs fonctions pour vérifier si une personne est authentifiée. Nous avons tout d'abord auth()->check() qui retourne « vrai » si la personne est connectée et « faux » si ce n'est pas le cas. Nous pouvons également utiliser la fonction auth()->guest() qui retourne « vrai » si la personne n'est pas connectée et « faux » si la personne est connectée.

Pour rediriger la personne si elle n'est pas connectée, je peux donc écrire :

if (! auth()->check()) {
    return redirect('/connexion');
}

Ou :

if (auth()->guest()) {
    return redirect('/connexion');
}

Ajouter un message d'erreur.

Je peux également ajouté un message d'erreur comme dans le tutoriel précédent avec :

public function accueil()
{
    if (auth()->guest()) {
        return redirect('/connexion')->withErrors([
            'email' => "Vous devez être connecté pour voir cette page.",
        ]);
    }

    return view('mon-compte');
}