Développeur web
Enregistrer la dernière connexion des utilisateurs dans Laravel
1. Ajouter les colonnes "last_login_at" et "last_login_ip" dans la migration de la table "users" :
Code :
Modifiez votre fichier de migration de la table users pour inclure les colonnes last_login_at et last_login_ip :
Schema::table('users', function (Blueprint $table) {
$table->id();
// Autres colonnes de la table...
$table->timestamp('last_login_at')->nullable();
$table->string('last_login_ip')->nullable();
$table->timestamps();
});
Explication :
Cette étape assure que votre base de données inclut les colonnes last_login_at et last_login_ip dans la table des utilisateurs. La colonne last_login_at sera utilisée pour enregistrer la date et l'heure de la dernière connexion de chaque utilisateur, tandis que la colonne last_login_ip enregistrera l'adresse IP de la dernière connexion.
2. Créer la méthode updateLastLogin dans le modèle User :
Code :
Ajoutez une méthode updateLastLogin dans le modèle User (app/Models/User.php) pour mettre à jour les colonnes "last_login_at" et "last_login_ip" lorsqu'un utilisateur se connecte :
/**
* Met à jour la date et l'adresse IP de la dernière connexion de l'utilisateur.
*
* @param string $ip Adresse IP de la dernière connexion
* @return void
*/
public function updateLastLogin($ip)
{
$this->update([
'last_login_at' => now(),
'last_login_ip' => $ip
]);
}
}
N'oubliez pas d'ajouter les champs "last_login_at" et "last_login_ip" à l'attribut fillable du modèle User pour permettre la mise à jour de ces champs via la méthode update :
/**
* Les attributs fillable du modèle.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
'last_login_at', // Ajoutez les champs last_login_at et last_login_ip ici
'last_login_ip',
];
Explication :
Cette méthode updateLastLogin est ajoutée au modèle User pour mettre à jour les colonnes "last_login_at" et "last_login_ip" avec la date et l'heure actuelles ainsi que l'adresse IP fournie à chaque fois qu'un utilisateur se connecte. Cela permet de garder une trace à la fois de la date/heure et de l'adresse IP de la dernière connexion de chaque utilisateur.
3. Créer un Listener pour mettre à jour la dernière connexion des utilisateurs :
Code :
Créez un listener nommé UpdateLastLogin avec la commande artisan :
php artisan make:listener UpdateLastLogin
Dans le fichier généré app/Listeners/UpdateLastLogin.php, implémentez la logique pour mettre à jour la dernière connexion des utilisateurs :
<?php
namespace App\Listeners;
use Illuminate\Auth\Events\Authenticated;
use Illuminate\Http\Request;
class UpdateLastLogin
{
/**
* La requête HTTP en cours.
*
* @var \Illuminate\Http\Request
*/
protected $request;
/**
* Créez l'écouteur d'événements.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* Handle the event.
*
* @param Authenticated $event
* @return void
*/
public function handle(Authenticated $event): void
{
// Récupérer l'adresse IP de la demande en cours
$ip = $this->request->ip();
// Mettre à jour la dernière connexion de l'utilisateur avec l'adresse IP
$event->user->updateLastLogin($ip);
}
}
Explication :
Ce listener joue un rôle essentiel dans la mise à jour de la dernière connexion des utilisateurs. En utilisant l'événement Authenticated déclenché après l'authentification d'un utilisateur, nous pouvons intercepter cet événement et définir une action à effectuer. Dans ce cas, nous récupérons l'adresse IP de la requête en cours à l'aide de l'objet Request et l'utilisons pour mettre à jour la dernière connexion de l'utilisateur.
La méthode handle est appelée automatiquement lorsque l'événement Authenticated est déclenché. À ce moment-là, nous récupérons l'adresse IP de la demande en cours à l'aide de $this->request->ip() et utilisons cette adresse IP pour mettre à jour la dernière connexion de l'utilisateur en appelant la méthode updateLastLogin du modèle User.
Cette approche garantit que la dernière connexion de chaque utilisateur est mise à jour de manière transparente et sécurisée à chaque authentification.
4. Activer le listener UpdateLastLogin lors de l'authentification de l'utilisateur :
Code :
Placez le code suivant dans le fichier app/Providers/EventServiceProvider.php, dans la méthode boot :
protected $listen = [
// autres listeners
Authenticated::class => [
UpdateLastLogin::class,
],
];
N'oubliez pas d'ajouter l'instruction use en haut du fichier pour importer la classe UpdateLastLogin :
use App\Listeners\UpdateLastLogin;
Explication :
Cette étape assure que le listener UpdateLastLogin est activé chaque fois qu'un utilisateur est authentifié. Le code écoute l'événement Authenticated et associe directement le listener UpdateLastLogin à cet événement. Cette approche regroupe tous les écouteurs d'événements dans un seul endroit, ce qui rend le code plus organisé et plus facile à gérer. Assurez-vous de placer ce code à l'intérieur de la classe EventServiceProvider et dans la méthode boot.
5. Afficher la dernière connexion de chaque utilisateur :
Code :
Dans la vue où vous souhaitez afficher la dernière connexion de l'utilisateur, utilisez la variable $user->last_login_at pour afficher la date et l'heure de sa dernière connexion :
Dernière connexion : {{ $user->last_login_at ? $user->last_login_at->format('d/m/Y H:i:s') : 'Jamais connecté' }}
Explication :
Cette étape consiste à récupérer la valeur de la colonne "last_login_at" pour chaque utilisateur et à l'afficher dans l'interface utilisateur. Utilisez la condition ternaire pour vérifier si la date de la dernière connexion est définie ; si c'est le cas, formatez-la en utilisant la méthode format() pour afficher la date et l'heure dans le format souhaité (ici, 'd/m/Y H:i:s'). Si la date de la dernière connexion n'est pas définie, affichez simplement "Jamais connecté". Cette approche permet aux utilisateurs de voir quand ils se sont connectés pour la dernière fois.
En suivant ces étapes, vous pourrez mettre en place un système pour suivre la dernière connexion de chaque utilisateur dans votre application Laravel.
Discussion (1)
Je suis novice en Laravel, mais ce tutoriel m'a aidé à comprendre comment mettre en œuvre la fonctionnalité de suivi de connexion. Les étapes sont bien expliquées, et j'apprécie particulièrement l'utilisation du listener pour mettre à jour automatiquement les informations de connexion. Bravo pour ce contenu instructif !