0

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

1
  • 1
    Create a new Middleware, if the request is authenticated, redirect to /dashboard or your desired location and then simply add this to your login route. Optionally, alias it if you intend to reuse it for register etc. Commented Mar 16 at 12:30

1 Answer 1

2

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 '/';
        });
        ...
    })
    ...
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.