Make sure Composer is installed, then create a new Laravel project:
composer create-project laravel/laravel laravel12-multiauth
cd laravel12-multiauth
Run the Laravel development server:
php artisan serve
Update the .env file:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=multiauth_db
DB_USERNAME=root
DB_PASSWORD=
Run migrations:
php artisan migrate
Laravel Breeze provides a simple authentication system:
composer require laravel/breeze --dev
php artisan breeze:install
Now, compile frontend assets:
npm install && npm run dev
Run migrations again:
php artisan migrate
Run the migration command to add a role column:
php artisan make:migration add_role_to_users_table --table=users
Update the migration file:
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('user'); // Default role: 'user'
});
}
Run the migration:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasFactory;
protected $fillable = ['name', 'email', 'password', 'role'];
}
Generate middleware for admin access:
php artisan make:middleware AdminMiddleware
Modify app/Http/Middleware/AdminMiddleware.php:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Auth;
class AdminMiddleware
{
public function handle(Request $request, Closure $next)
{
if (Auth::check() && Auth::user()->role === 'admin') {
return $next($request);
}
return redirect('/'); // Redirect unauthorized users
}
}
Register the middleware in app/Http/Kernel.php:
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
web.phpModify routes/web.php:
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
// Home Page
Route::get('/', function () {
return view('welcome');
});
// User Dashboard
Route::middleware(['auth'])->group(function () {
Route::get('/user/dashboard', function () {
return view('user.dashboard');
})->name('user.dashboard');
});
// Admin Dashboard (Protected by Middleware)
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/dashboard', function () {
return view('admin.dashboard');
})->name('admin.dashboard');
});
// Authentication Routes
Route::get('/login', [AuthController::class, 'login'])->name('login');
Route::post('/login', [AuthController::class, 'authenticate']);
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
Modify app/Http/Controllers/AuthController.php:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function login()
{
return view('auth.login');
}
public function authenticate(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
if (Auth::user()->role === 'admin') {
return redirect()->route('admin.dashboard');
}
return redirect()->route('user.dashboard');
}
return back()->withErrors(['email' => 'Invalid login details']);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
resources/views/user/dashboard.blade.php)<h2>Welcome, User!</h2>
<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
resources/views/admin/dashboard.blade.php)<h2>Welcome, Admin!</h2>
<a href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">Logout</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
In this tutorial, we successfully implemented a multi-authentication system in Laravel 12. We covered:
✅ Setting up authentication with Laravel Breeze
✅ Adding a role column for user and admin authentication
✅ Creating an admin middleware to restrict access
✅ Redirecting users based on their roles
Now, you can extend this system by adding permissions, role-based access control (RBAC), and API authentication. 🚀