To implement multi-authentication with different user tables in a Laravel application, you can use Laravel's authentication guards. This allows you to define separate authentication mechanisms for different user types, such as Admins and Members, each with their own tables and models.
Here's a step-by-step guide to achieve this:
-
Create Separate Tables and Models:
First, ensure you have two tables, e.g.,
usersfor Admins andmembersfor Members. You should also have corresponding Eloquent models, e.g.,UserandMember. -
Define Guards in
auth.php:In your
config/auth.phpfile, define separate guards for each user type. You can also define separate providers if needed.'guards' => [ 'admin' => [ 'driver' => 'session', 'provider' => 'users', ], 'member' => [ 'driver' => 'session', 'provider' => 'members', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'members' => [ 'driver' => 'eloquent', 'model' => App\Models\Member::class, ], ], -
Create Authentication Controllers:
Create separate controllers for handling login for Admins and Members. You can use Laravel's
Authfacade to specify which guard to use.For Admins:
namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AdminLoginController extends Controller { public function showLoginForm() { return view('auth.admin-login'); } public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::guard('admin')->attempt($credentials)) { return redirect()->intended('/admin/dashboard'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); } }For Members:
namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class MemberLoginController extends Controller { public function showLoginForm() { return view('auth.member-login'); } public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::guard('member')->attempt($credentials)) { return redirect()->intended('/member/dashboard'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); } } -
Define Routes:
Define routes for the login pages and actions in your
web.phpfile.Route::get('/admin/login', [AdminLoginController::class, 'showLoginForm'])->name('admin.login'); Route::post('/admin/login', [AdminLoginController::class, 'login']); Route::get('/login', [MemberLoginController::class, 'showLoginForm'])->name('member.login'); Route::post('/login', [MemberLoginController::class, 'login']); -
Create Views:
Create separate login views for Admins and Members, e.g.,
resources/views/auth/admin-login.blade.phpandresources/views/auth/member-login.blade.php. -
Middleware and Redirects:
Ensure you have middleware to protect routes based on the guard. You can create custom middleware if needed or use the
authmiddleware with the guard specified.Route::middleware('auth:admin')->group(function () { Route::get('/admin/dashboard', function () { // Admin dashboard }); }); Route::middleware('auth:member')->group(function () { Route::get('/member/dashboard', function () { // Member dashboard }); });
By following these steps, you can set up a multi-authentication system with separate user tables and login pages for different user types in a Laravel application.