Getting a redirect Loop from Laravel CRUD app

37 Views Asked by At

I am getting a redirect loop when trying to access the /admin route I only want the user admin with the right password from the config file to be able to perform the crud operations, I am planning to then add user routes. I am mainly creating a news portal. I am very new to Laravel.

Routes

Route::middleware(['OpenAdminLoginWhenPasswordIsNotCorrect', 'OpenAdminPanelWhenPasswordIsCorrect'])->group(function () {
    Route::get('/admin', [AdminLogin::class, 'login'])->name('admin.login');
    Route::post('/admin', [AdminLogin::class, 'loginSubmit'])->name('admin.login.submit');
    Route::get('/admin/news', [NewsController::class, 'index'])->name('admin.news.index');
    Route::get('/admin/news/create', [NewsController::class, 'create'])->name('admin.news.create');
    Route::post('/admin/news/', [NewsController::class, 'store'])->name('admin.news.store');
    Route::get('/admin/news/{news}/edit', [NewsController::class, 'edit'])->name('admin.news.edit');
    Route::put('/admin/news/{news}/update', [NewsController::class, 'update'])->name('admin.news.update');
    Route::delete('/admin/news/{news}/delete', [NewsController::class, 'delete'])->name('admin.news.delete');
});

Middlewares

class OpenAdminPanelWhenPasswordIsCorrect
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next)
    {
        $userHasAccessToTheContent = Session::get('userHasAccessToTheContent', false);
        if ($userHasAccessToTheContent === true) {
            return $next($request);
        } else {
            return redirect()->route('admin.news.index');
        }
    }
}
class OpenAdminLoginWhenPasswordIsNotCorrect
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next)
    {
        $userHasAccessToTheContent = Session::get('userHasAccessToTheContent', false);
        if ($request->route()->named('admin.login')) {
            return $next($request);
        }
        if ($userHasAccessToTheContent === false && $request->path() !== '/admin/news') {
            return redirect()->route('admin.login');
        } else {
            return $next($request);
        }
    }
}

Controller

class AdminLogin extends Controller
{
    public function login()
    {
        return view('admin.login');
    }

    public function loginSubmit(Request $request)
    {
        $password = $request->input('password');
        $username = $request->input('username');
        $expectedPass = config('admin.password');
        $expectedUser = config('admin.username');
        if ($username === $expectedUser && $password === $expectedPass) {
            Session::put('userHasAccessToTheContent', true);

            return redirect()->route('admin.news.index');
        }

        return redirect()->route('admin.login');
    }
}

Tried checking the Middleware logic and asking barb and gpt with no luck

0

There are 0 best solutions below