Laravel - last login date and time timestamp
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
Title: Effortlessly Track User Last Login in Laravel with Eloquent Events and Timestamps
Body:
In today's world, online security is of utmost importance to protect user data and personal information. In Laravel, there are several built-in features that aid in managing and securing your web application. One such feature is recording the last login date and time for each user. This blog post will guide you on how to do just that with the help of Eloquent models, events, and timestamps.
Setting Up the Last Login Tracker
Firstly, we need a dedicated table for storing this information. Create a new table called 'user_logins', which will look something like:CREATE TABLE user_logins (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
login_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
FOREIGN KEY (user_id) REFERENCES users(id)
);The 'login_date' column has the CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP() function to automatically set its value when a new row is added or updated. This ensures that every time a user logs in, their login date and timestamp are updated accordingly.
Implementing Eloquent Events
Laravel's Event system allows us to trigger the appropriate actions at relevant times throughout our application. We can now create an event listener for each of these events:- User login: Whenever a user logs in successfully, we will fire an event.
- User logout: When a user explicitly logs out from their session, we will capture that event too.
Here is the code to create both the listeners:
use App\Events\UserLoginEvent;
use App\Events\UserLogoutEvent;
use Illuminate\Auth\Events\Logout as LogoutEvent;
class UserLoginEventListener extends Listener
{
public function handle(UserLoginEvent $event)
{
// Code to insert a new row in the 'user_logins' table or update its login date
}
}
class UserLogoutEventListener extends Listener
{
public function handle(LogoutEvent $event)
{
$this->dispatch(new UserLogoutEvent());
}
}Note that we dispatch a specific event - 'UserLogoutEvent' - in the UserLogoutEventListener, which will be handled by our listener that saves this data to the database.
Utilizing Eloquent Relationships
To make querying and working with user logs more efficient, we can leverage Laravel's relationships between models. In our User model, add the following relation:class User extends Authenticatable
{
// ... other code...
public function lastLogins()
{
return $this->hasMany(UserLogin::class);
}
}This relationship creates a one-to-many association between the 'users' table and the newly created 'user_logins' table. Now, you can access all user login details for a particular user via this relation:
$user = User::find(1);
foreach ($user->lastLogins as $login) {
// Process each login record here
}