in my laravel 12 project, I use 2 tables for authentication, i.e. the users table and the admin_users table which are both extended Authenticatable in the model. When a logged-in user navigates to a url http://127.0.0.1:8000/login_jemaat laravel redirects it to the http://127.0.0.1:8000/admin/login page, which I shouldn't want. How do I fix this problem, so when a logged-in user navigates to a url http://127.0.0.1:8000/login_jemaat laravel will redirects it to http://127.0.0.1:8000/
Users
class User extends Authenticatable
{
}
AdminUser
class AdminUser extends Authenticatable
{
}
config/auth.php:
<?php
return [
'defaults' => [
'guard' => env('AUTH_GUARD', 'users'),
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
],
'guards' => [
'users' => [
'driver' => 'session',
'provider' => 'users',
],
'admin_users' => [
'driver' => 'session',
'provider' => 'admin_users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'admin_users' => [
'driver' => 'eloquent',
'model' => App\Models\AdminUser::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
'expire' => 60,
'throttle' => 60,
],
'admin_users' => [
'provider' => 'admin_users',
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
];
bootstrap/app.php:
->withMiddleware(function (Middleware $middleware) {
$middleware->redirectGuestsTo(function (Request $request) {
// Jika URL mengarah ke dashboard (atau sub-path-nya), arahkan ke halaman admin login
if ($request->is('dashboard') || $request->is('dashboard/*')) {
return route('admin.login');
}
// Defaultnya untuk pengguna jemaat
return route('pages.login');
});
})
route/web.php:
Route::middleware('guest:users')->group(function () {
Route::get('/login_jemaat', function () {
return view('pages.login');
})->name('pages.login');
Route::get('/register_jemaat', function () {
return view('pages.register');
})->name('pages.register');
Route::post('/register_jemaat', [PageController::class, 'register'])->name('register_jemaat');
Route::post('/login_jemaat', [PageController::class, 'login'])->name('login_jemaat');
});
Route::middleware('guest:admin_users')->group(function () {
Route::get('/admin/login', [AdminAuthController::class, 'index'])->name('admin.login');
Route::post('/admin/login', [AdminAuthController::class, 'login'])->name('admin.login.submit');
});
Thank you everyone
In laravel 12, to redirect users if authenticated. Check the document.
From laravel 11, you can use redirectUsersTo
to check user is authenticated in bootstrap/app.php
.
bootstrap/app.php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Request;
return Application::configure(basePath: dirname(__DIR__))
...
->withMiddleware(function (Middleware $middleware) {
...
$middleware->redirectUsersTo(function (Request $request): string {
if (auth()->guard('admin_users')->check()) {
return 'dashboard';
}
return '/';
});
...
})
...