DEV Community

Cover image for How to Disable Users from Login in Laravel
TechTool India
TechTool India

Posted on

How to Disable Users from Login in Laravel

Laravel 8 does not include the auth system by default now, You can Read Laravel 8 Authentication.

The common feature of ban or suspend any user from authentication is major missing in Laravel.

Here is What the login form Will looks like after banning any user from the application.
Suspended User

Steps To Achieve the outcome

Step 1 - Add New Column 'status' in the users table

Create a migration by running the command below

php artisan make:migration add_status_to_users_table
Enter fullscreen mode Exit fullscreen mode

After Migration File created update the following code in the up() function.

Schema::table('users', function (Blueprint $table) {
    $table->integer('status')->default(1);
});
Enter fullscreen mode Exit fullscreen mode

Add 'status' in Fillable in app\Models\User.php

protected $fillable = [
        'name',
        'email',
        'password',
        'status'
];
Enter fullscreen mode Exit fullscreen mode

Step 2 - Create a Middleware - CheckBanned

Create a middleware by running the command below.

php artisan make:middleware CheckBanned
Enter fullscreen mode Exit fullscreen mode

Replace the handle method in app/Http/CheckBanned.php

public function handle(Request $request, Closure $next)
{
    if(auth()->check() && (auth()->user()->status == 0)){
            Auth::logout();

            $request->session()->invalidate();

            $request->session()->regenerateToken();

            return redirect()->route('login')->with('error', 'Your Account is suspended, please contact Admin.');

    }

    return $next($request);
}
Enter fullscreen mode Exit fullscreen mode

Step 3 - Register the Middleware - app/Http/Kernel.php

IN 'web' Middleware group register the CheckBanned Middleware by putting the code below.

\App\Http\Middleware\CheckBanned::class,
Enter fullscreen mode Exit fullscreen mode

Step 4 - Display The Error on the log in page.

Open login blade 'resources/views/auth/login.blade.php'

Add The following code to display the error message.

@if (session('error'))
   <div class="alert alert-danger">
        {{ session('error') }}
   </div>
@endif
Enter fullscreen mode Exit fullscreen mode

You can watch the video for complete Explanation and implementation.

Thank You for Reading

Reach Out To me.
Twitter
Instagram
TechToolIndia

Oldest comments (7)

Collapse
 
bdelespierre profile image
Benjamin Delespierre

Thank for the article. I find the status property very vague and indescriptive. Wouldn't it be better to have a is_banned flag?

Collapse
 
techtoolindia profile image
TechTool India

Thanks for suggestion. Yes you can use any flag which we can validate in middleware.

Collapse
 
mikecarolan profile image
Mike-Carolan

Excellent article! Straightforward and to the point! Worked like a champ! Thank you!

Collapse
 
steven595804 profile image
steven

how can i use this with jetstream?

Collapse
 
techtoolindia profile image
TechTool India

Very soon i will write a blog in the same.

Collapse
 
steven595804 profile image
steven

is it already up?

Collapse
 
rasmiyarahmathrv profile image
RasmiyaRahmathRV

Thank you for the article. Simple, Clean and up to the point. great work