Learn how to impersonate users in your Laravel app

A passionate full-stack developer from @ePlus.DEV
Search for a command to run...

A passionate full-stack developer from @ePlus.DEV
No comments yet. Be the first to comment.
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling.
Code duplication is the most painful thing for a lot of developers, you think you have solved the problem, but there are several instances of the same issue. In many of the codebases I have seen as a Laravel developer, the console commands always see...
Một bản tin giúp Developer cập nhật nhanh AI, Cloud, Open Source và những công nghệ đáng chú ý trong ngày. 📌 Executive Summary OpenAI giảm mạnh giá GPT-5.6 Luna và Terra, đồng thời chuyển Priority

Một bản tin giúp Developer cập nhật nhanh AI, Cloud, Open Source và những công nghệ đáng chú ý trong ngày. 📌 Executive Summary GitHub Copilot code review đã hỗ trợ chính thức Agent Skills và MCP s

Overview Vibe coding is an emerging software development practice that uses artificial intelligence (AI) to generate functional code from natural language prompts, accelerating development, and making

Overview This lab demonstrates how Gemini can interpret what is in an image and provide a description quickly. During the exercise, you will provide the following image as input and ask Gemini is: "Wh

Overview In a challenge lab you’re given a scenario and a set of tasks. Instead of following step-by-step instructions, you will use the skills learned from the labs in the course to figure out how to

One of the neat features of Laravel Nova is the ability to impersonate users right from the control panel. This is handy for many reasons, but for me, when you get a bug report or an issue and want to see exactly what the user sees, impersonating them saves lots of time because you can see exactly what they see.
If you'd like to set this up in your Laravel app, the Laravel Impersonate package makes this simple. Here is how to get started.
Just like all packages, require it with composer:
composer require lab404/laravel-impersonate
Next, open config/app.php and add it to the providers array:
'providers' => [
// ...
Lab404\Impersonate\ImpersonateServiceProvider::class,
],
After that, open your Models/User and add the trait:
use Lab404\Impersonate\Models\Impersonate;
class User extends Authenticatable
{
use Impersonate;
The Laravel Impersonate package includes a few ways to impersonate a user, but I found it easiest to use their routes macro by adding it to your routes/web.php file
Route::impersonate();
This gives you a few named routes:
// Where $id is the ID of the user you want to impersonate
route('impersonate', $id)
// Or in case of multi guards, you should also add `guardName` (defaults to `web`)
route('impersonate', ['id' => $id, 'guardName' => 'admin'])
// Generate an URL to leave the current impersonation
route('impersonate.leave')
With Laravel Impersonate all set up now, you can use a few Blade helpers:
@canImpersonate($guard = null)
<a href="{{ route('impersonate', $user->id) }}">Impersonate this user</a>
@endCanImpersonate
Then the reverse:
@impersonating($guard = null)
<a href="{{ route('impersonate.leave') }}">Leave impersonation</a>
@endImpersonating
One more thing you might want to consider setting up is options to limit who can impersonate other users, and which users can be impersonated. On your Models/User, you can add the following methods:
/**
* By default, all users can impersonate anyone
* this example limits it so only admins can
* impersonate other users
*/
public function canImpersonate(): bool
{
return $this->is_admin();
}
/**
* By default, all users can be impersonated,
* this limits it to only certain users.
*/
public function canBeImpersonated(): bool
{
return ! $this->is_admin();
}
Overall the Laravel Impersonate package includes everything you need to log in as others users easily and is a simple way of adding this to your app. If you'd like to find out more about the package and the more advanced features, check out the package and the read me includes more details.
Source: