Laravel 8 Multi Auth Example Tutorial

10-Apr-2023

.

Admin

Laravel 8 Multi Auth Example Tutorial

Hi Guys,

Today, I will learn you how to create laravel 8 multi auth. i would like to share with you laravel 8 multiple auth. This post will give you simple example of laravel 8 multiple authentication.i explained simply step by step multiple authentication in laravel 8.

we will create very simple way and you can easily use with your laravel 8 application. so let's follow this step.

Here, I will give you full example for Laravel 8 multi auth using laravel/ui as bellow.

Step 1: Install Laravel 8 Application


we are going from scratch, So we require to get fresh Laravel application using bellow command, So open your terminal OR command prompt and run bellow command:

composer create-project --prefer-dist laravel/laravel blog

Step 2: Database Configuration

In this step, configure database with your downloded/installed laravel 8 app. So, you need to find .env file and setup database details as following:

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=db name

DB_USERNAME=db user name

DB_PASSWORD=db password

Step 3: Update Migration and Model

In this step, we need to add new row "is_employee" in users table and model. than we need to run migration. so let's change that on both file.

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;

class AddIsEmployeeInUsersTable extends Migration

{

/**

* Run the migrations.

*

* @return void

*/

public function up()

{

Schema::table('users', function (Blueprint $table) {

$table->boolean('is_employee')->nullable();

});

}

/**

* Reverse the migrations.

*

* @return void

*/

public function down()

{

Schema::table('users', function (Blueprint $table) {

$table->dropColumn('is_employee');

});

}

}

app/Models/User.php

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Foundation\Auth\User as Authenticatable;

use Illuminate\Notifications\Notifiable;

class User extends Authenticatable

{

use HasFactory, Notifiable;

/**

* The attributes that are mass assignable.

*

* @var array

*/

protected $fillable = [

'name', 'email', 'password', 'twitter_id', 'is_employee'

];

/**

* 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',

];

public function addNew($input)

{

$check = static::where('twitter_id',$input['twitter_id'])->first();

if(is_null($check)){

return static::create($input);

}

return $check;

}

}

Now we need to run migration.

so let's run bellow command:

php artisan migrate

Step 4: Create Auth using scaffold

Here,In this step, I will create auth scaffold command to create login, register and dashboard. so run following commands:

Laravel 8 UI Package

composer require laravel/ui

Generate auth

php artisan ui bootstrap --auth

npm install

npm run dev

Step 5: Create IsEmployee Middleware

In this step, we require to create Employee middleware that will allows only Employee access users to that routes. so let's create Employee user with following steps.

php artisan make:middleware IsEmployee

app/Http/middleware/IsEmployee.php

<?php

namespace App\Http\Middleware;

use Closure;

use Illuminate\Http\Request;

class IsEmployee

{

/**

* Handle an incoming request.

*

* @param \Illuminate\Http\Request $request

* @param \Closure $next

* @return mixed

*/

public function handle(Request $request, Closure $next)

{

if(auth()->user()->is_employee == 1){

return $next($request);

}

return redirect(‘home’)->with(‘error’,"You don't have emplyee rights.");

}

}

app/Http/Kernel.php

.......

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\Authenticate::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,

'is_employee' => \App\Http\Middleware\IsEmployee::class,

];

....

Step 6: Create Route

Now, we need to add one more route for User home page so let's add that route in web.php file.

routes/web.php

use App\Http\Controllers\HomeController;

Route::get('employee/home', [HomeController::class, 'employeeHome'])->name('employee.home')->middleware('is_employee');

Step 7: Add Method on Controller

In this step, we need add employeeHome() method for User route in HomeController. so let's add like as bellow:

<?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 employeeHome()

{

return view('employeeHome');

}

}

Step 8: Create Blade file

In this step, we need to create new blade file for User and update for user blade file. so let's change it.

resources/views/home.blade.php

@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 User.

</div>

</div>

</div>

</div>

</div>

@endsection

resources/views/employeeHome.blade.php

@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 Employee.

</div>

</div>

</div>

</div>

</div>

@endsection

Step 9: Update on LoginController

Now In this step, we will change on LoginController, when user will login than we redirect according to user access. if normal user than we will redirect to home route and if User than we redirect to User route. so let's change.

app/Http/Controllers/Auth/LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

use App\Providers\RouteServiceProvider;

use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;

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()->is_employee == 1) {

return redirect()->route('employee.home');

}else{

return redirect()->route('home');

}

}else{

return redirect()->route('login')->with('error','Email-Address And Password Are Wrong.');

}

}

}

Step 10: Create Seeder

We will create seeder for create new User and normal user. so let's create seeder using following command:

php artisan make:seeder UsersSeeder

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

use App\Models\User;

class UsersSeeder extends Seeder

{

/**

* Run the database seeds.

*

* @return void

*/

public function run()

{

$user = [

[

'name'=>'Employee',

'email'=>'employee@nicesnippets.com',

'is_employee'=>'1',

'password'=> bcrypt('123456'),

],

[

'name'=>'User',

'email'=>'user@nicesnippets.com',

'is_employee'=>'0',

'password'=> bcrypt('123456'),

],

];

foreach ($user as $key => $value) {

User::create($value);

}

}

}

Now we are ready to run our laravel 8 multi auth example so run bellow command for quick run:

php artisan serve

Now you can open bellow URL on your browser:

http://localhost:8000/employee/home

User

employee User

It will help you...

#Laravel 8

#Laravel