Hello Laravel Friends,
Today we will learn about How to Make Admin Auth in Laravel 8.
Admin authentication is required in Laravel when you work with web applications. So here I will explain How to Make Admin Auth in Laravel 8 in a step-by-step way.
So let’s start the Admin Auth in Laravel 8.
Steps to Make Admin Auth in Laravel 8:
Step 1: Create an admin table in the database
Create one migration for admin and add “name, email, password, created_at, updated_at” fields in the “admins” table
Step 2: Add Guards
To add guards, you need to make the following changes in the config/auth.php file.
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], ],
Step 3: Add admin auth middleware
Run the below command
php artisan make:middleware AdminAuthenticated
Now, move to the below path
app/Http/Middleware/AdminAuthenticated.php
And add the code as follows
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AdminAuthenticated { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ public function handle(Request $request, Closure $next) { if (Auth::guard('admin')->user()) { return $next($request); } if ($request->ajax() || $request->wantsJson()) { return response('Unauthorized.', 401); } else { return redirect(route('adminLogin')); } } }
Step 4: Add Middlewave in Kernel.php file
Move to the following path
app/Http/Kernel.php
Now add the code as follows
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'admin' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; /** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array<string, class-string|string> */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'adminauth' => \App\Http\Middleware\AdminAuthenticated::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ];
Step 5: Add Admin Login Routes
Go to the below-mentioned path
routes/web.php
Now add the below code
Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function () { Route::get('/login', [AdminAuthController::class, 'getLogin'])->name('adminLogin'); Route::post('/login', [AdminAuthController::class, 'postLogin'])->name('adminLoginPost'); Route::group(['middleware' => 'adminauth'], function () { Route::get('/', function () { return view('welcome'); })->name('adminDashboard'); }); });
Step 6: Create AdminAuth controller
Run the following command
php artisan make:controller Admin/AdminAuthController
Then navigate to the following path
app/Http/Controllers/Admin/AdminAuthController.php
And add the below code snippet
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; class AdminAuthController extends Controller { public function getLogin(){ return view('admin.auth.login'); } public function postLogin(Request $request) { $this->validate($request, [ 'email' => 'required|email', 'password' => 'required', ]); if(auth()->guard('admin')->attempt(['email' => $request->input('email'), 'password' => $request->input('password')])){ $user = auth()->guard('admin')->user(); if($user->is_admin == 1){ return redirect()->route('adminDashboard')->with('success','You are Logged in sucessfully.'); } }else { return back()->with('error','Whoops! invalid email and password.'); } } public function adminLogout(Request $request) { auth()->guard('admin')->logout(); Session::flush(); Session::put('success', 'You are logout sucessfully'); return redirect(route('adminLogin')); } }
Step 7: Create a Blade file
Go to the below path
resources\views\admin\auth\login.blade.php
And add the code as follows
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Admin Login</title> </head> <body class="vertical-layout vertical-menu-modern" data-open="click" data-menu="vertical-menu-modern" data-col="" data-framework="laravel"> <div class="auth-wrapper auth-basic px-2"> <div class="auth-inner my-2"> <!-- Login basic --> @if(\Session::get('success')) <div class="alert alert-success alert-dismissible fade show" role="alert"> <div class="alert-body"> {{ \Session::get('success') }} </div> <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div> @endif {{ \Session::forget('success') }} @if(\Session::get('error')) <div class="alert alert-danger alert-dismissible fade show" role="alert"> <div class="alert-body"> {{ \Session::get('error') }} </div> <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div> @endif <div class="card mb-0"> <div class="card-body"> <h2 class="brand-text text-primary ms-1">Admin Login</h2> <form class="auth-login-form mt-2" action="{{route('adminLoginPost')}}" method="post"> @csrf <div class="mb-1"> <label for="email" class="form-label">Email</label> <input type="text" class="form-control" id="email" name="email" value="{{old('email') }}" autofocus /> @if ($errors->has('email')) <span class="help-block font-red-mint"> <strong>{{ $errors->first('email') }}</strong> </span> @endif </div> <div class="mb-1"> <div class="d-flex justify-content-between"> <label class="form-label" for="password">Password</label> <a href="{{url('auth/forgot-password-basic')}}"> <small>Forgot Password?</small> </a> </div> <div class="input-group input-group-merge form-password-toggle"> <input type="password" class="form-control form-control-merge" id="password" name="password" tabindex="2" /> <span class="input-group-text cursor-pointer"><i data-feather="eye"></i></span> </div> @if ($errors->has('password')) <span class="help-block font-red-mint"> <strong>{{ $errors->first('password') }}</strong> </span> @endif </div> <button type="submit" class="btn btn-primary w-100" tabindex="4">Sign in</button> </form> </div> </div> <!-- /Login basic --> </div> </div> </body> </html>
Step 8: Admin Dashboard View
Move to the following path
resources\views\welcome.blade.php
Add the code as follows
<!DOCTYPE html> <html> <head> <title>Admin Auth Laravel 8 </title> </head> <body> <div class="container"> Welcome, Admin </div> </body> </html>
Step 9: Run your Laravel application
Now, the admin auth is ready for the login. just run your Laravel application using the following command in the terminal.
php artisan serve
Then open the browser and paste the following URL into your browser
http://127.0.0.1:8000/admin/login
Output:
Admin Login
Conclusion:
This way you can easily Make Admin Auth in Laravel 8. Alternatively, you can also Perform Laravel Authentication with Breeze.
If you have any doubt, share them with me through comments and stay updated for more Laravel tutorials.
Happy Coding!