Introduction
Multi-authentication allows different user roles (e.g., admin and users) to have separate login systems. In this guide, we will implement multi-auth in Laravel using guards and middleware.
Step 1: Install Laravel Authentication
Laravel provides built-in authentication scaffolding. Install it using:
composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev
Step 2: Configure Guards in auth.php
Edit config/auth.php
to define guards for admin and users.
'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: Create an Admin Model and Migration
php artisan make:model Admin -m
Update the migration file:
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
Run the migration:
php artisan migrate
Step 4: Create Admin Authentication Routes & Controller
php artisan make:controller AdminController
Define routes in routes/web.php
:
Route::prefix('admin')->group(function () {
Route::get('/login', [AdminController::class, 'showLoginForm'])->name('admin.login');
Route::post('/login', [AdminController::class, 'login']);
Route::middleware('auth:admin')->group(function () {
Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard');
});
});
Step 5: Implement Admin Login Logic
public function login(Request $request) {
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required'
]);
if (Auth::guard('admin')->attempt($credentials)) {
return redirect()->route('admin.dashboard');
}
return back()->withErrors(['email' => 'Invalid credentials']);
}
Conclusion
With these steps, you can implement multi-authentication in Laravel, allowing admins and users to log in separately.
0 Comments