How to Ban or block user for login in Laravel
So guys to BAN or BLOCK user for login, we have already setup with login and registration in laravel using Auth Command.
Step 1: By the following below command:
Step 2: All the setup for login and register is successfully done. Now, let's edit users table which is available in following folder: database / migrations / yoursomedate_create_users_table.php and add the type column for it:
$table->tinyInteger('isban')->default('0'); //Add in UserTable before timestamps
Note: the value which you store in isban column: 0 = un_banned / 1 = isbanned_now.
Step 3: migrate this table OR go to your phpmyadmin and add one column named isban before created_at column in Users Table into database.
Step 4: Go to your Model, where path is App/User.php and then paste the column name isban to your protected $fillable as given below:
protected $fillable = [
'name',
'email',
'password',
'isban',
];
Step 5: Now, create a middleware for checking the user is banned or not banned with the name UserMiddleware:
php artisan make:middleware UserMiddleware
after middleware generated go to your UserMiddleware as follows: app/Http/Middleware/UserMiddleware.php and paste the below code:
use Illuminate\Support\Facades\Auth;
public function handle($request, Closure $next)
{
if(Auth::check() && Auth::user()->isban)
{
$banned = Auth::user()->isban == "1"; // "1"= user is banned / "0"= user is unBanned
Auth::logout();
if ($banned == 1) {
$message = 'Your account has been Banned. Please contact administrator.';
}
return redirect()->route('login')
->with('status',$message)
->withErrors(['email' => 'Your account has been Banned. Please contact administrator.'])
;
}
return $next($request);
}
Step 6: Now Register your Middleware just you created named UserMiddleware with the following path: app/Http/Kernel.php and goto the routeMiddleware and paste the below code:
protected $routeMiddleware = [
'isUser' => \App\Http\Middleware\UserMiddleware::class, //Add to the end
];
Step 7: Set your Redirection when you are logging as user or admin or any other role provided. Goto path - app/Http/Controller/Auth/LoginController.php and paste the below code:
use Illuminate\Support\Facades\Auth;
// Use this below to redirect
protected $redirectTo = '/home';
// OR-Else => use if you already used to redirecting authentication as per role.
protected function authenticated()
{
if(Auth::user()->role_as == '0') // Normal or Default User Login
{
return redirect('/home');
}
}
Step 8: Lets Setup the Route for this Process/Checking of isbanned and unbanned user as give below:
Route::group(['middleware' => ['auth','isUser']], function () {
Route::get('/home', 'HomeController@index')->name('home');
});
Step 9: Finally, Now you have to paste the code the check the message you get from your UserMiddleware created from your path resource/view/auth/login.blade.php page file.
@if (session('status'))
<div class="alert alert-danger">{{ session('status') }}</div>
@endif
<form method="POST" action="{{ route('login') }}">
@csrf
Step 10: Finally we are done with above thing to ban a user, so now lets register the 1 user. Example: Email: user@gmail.com, Password: 12345678, and now click to register, so once you get registered your isban column stores the default value as "0", so if you want to block the user, change the isban column value to "1". by below command or directly on phpmyadmin or create a CRUD:
$ php artisan tinker
>>> use App\User;
>>>User::where('email', 'user@gmail.com')->update(['isban' => '1']);
Step 11: Serve your artisan and get started with it. Thank you.