In this tutorial, i would like to share with you how to create laravel multiple authentication using middleware. we will create multi auth in laravel using middleware. i will write step by step tutorial of creating multiple authentication in laravel
composer create-project --prefer-dist laravel/laravel blog
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=here your DB name
DB_USERNAME=Your DB username
DB_PASSWORD=here your DB password
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('user_type',10)->default('User'); //Admin $table->tinyInteger('status')->default('1'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * @return void */ public function down() { Schema::dropIfExists('users'); } }
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
* @var array
*/
protected $fillable = [
'name', 'email', 'password','user_type','status'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
php artisan migrate
composer require laravel/ui
php artisan ui bootstrap --auth
npm install
npm run dev
php artisan make:middleware Admin
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(auth()->check() && auth()->user()->user_type == "Admin"){
return $next($request);
}
return redirect('admin/login')->with('error',"You don't have admin access.");
}
}
<
....
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::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,
'admin' => \App\Http\Middleware\Admin::class,
];
....
Route::get('admin/home', 'HomeController@adminHome')->name('admin.home')->middleware('admin');
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { /** * Create a new controller instance. * @return void */ public function __construct() { $this->middleware('auth'); } /** * Show the application dashboard * @return \Illuminate\Contracts\Support\Renderable */ public function index() { return view('home'); } /** * Show the application dashboard. * @return \Illuminate\Contracts\Support\Renderable */ public function adminHome() { return view('adminHome'); } }
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
You are normal user.
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
You are Admin.
</div>
</div>
</div>
</div>
</div>
@endsection
<?phpnamespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; use Auth; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } public function login(Request $request) { $input = $request->all(); $this->validate($request, [ 'email' => 'required|email', 'password' => 'required', ]); if(auth()->attempt(array('email' => $input['email'], 'password' => $input['password']))) { if (auth()->user()->user_type == 'Admin') { return redirect('admin'); }else{ return redirect()->route('home'); } }else{ return redirect()->route('login') ->with('error','Email-Address And Password Are Wrong.'); } } public function logout(Request $request) { if(isset(Auth::user()->user_type)){ $role = Auth::user()->user_type; }else { $role = ''; } Auth::logout(); // Check user role switch ($role) { case 'Admin': return redirect('/admin/login'); break; case 'User': return redirect('/'); break; default: return redirect('/home'); break; } } }
php artisan make:seeder CreateUsersSeeder
<?phpuse Illuminate\Database\Seeder; use App\User; class CreateUsersSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $user = [ [ 'name'=>'Admin', 'email'=>'admin@trickprof.com', 'user_type'=>'Admin', 'password'=> bcrypt('123456'), ], [ 'name'=>'User', 'email'=>'user@webmeed.com', 'user_type'=>'User', 'password'=> bcrypt('123456'), ], ]; foreach ($user as $key => $value) { User::create($value); } } }
Composer dump-autoload
php artisan db:seed --class=CreateUsersSeeder
php artisan serve
We are Recommending you:
- Integrate Zoho SMTP Mail Configurations in Laravel?
- Laravel 8/7 Overwriting the Default Pagination System
- How to create real time sitemap.xml file in Laravel
- Laravel .Htaccess
- How to use soft delete in Laravel?
- Laravel's .htaccess to remove "public" from URL
- How to generate dynamic real time sitemap.xml file in Laravel 8
- How to change timezone in laravel 8
- Why Use the Repository Pattern in a Laravel Application
IntroductionGoogle Search Console (GSC) is a...
Master Your Time with the 80/20 Rule: A...
Get Control of Your Time: 6 Easy Ways...
India’s startup space is booming in 2025....
Below is a revised version of the article "5...
Git is a distributed version control system...
Artisan is "command line interface"...
IntroductionGoogle Search Console (GSC) is a...
Zip is a command-line utility tool used for...