Pegasus
Pegasus

Reputation: 95

Custom Middleware - 'Too Many Redirects' - Laravel

I want to create a custom middleware that only if the user is authenticated and the email is a certain email to access the /admin page.

Although, when I specify my custom route and then a redirect it always says too many redirects..

Short Explanation.

  1. User Logs in -> redirected to /home. (Works)
  2. If user tries to access /admin and their email isn't like the one specified in the middleware, redirect to /home.
  3. If its true, let them in /admin

My middleware is called 'admin.verify'

Routes File:

Route::get('/admin', 'AdminController@index')->name('admin.index');

AdminController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminController extends Controller
{
    public function __construct(){
      $this->middleware(['auth', 'admin.verify']);
    }


    public function index(){
      return view('admin.test');
    }
}

Middleware:

 public function handle($request, Closure $next)
    {

      if (Auth::check() && Auth::User()->email == '[email protected]') {
        return $next($request);
      } else {
        return redirect()->route('home');
      }

My Home Route:

 GET|HEAD | home | home| App\Http\Controllers\HomeController@index | web,auth

Home Controller:

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('home');
    }
}

Upvotes: 0

Views: 2086

Answers (2)

ankith vishwakarma
ankith vishwakarma

Reputation: 104

The problem is that when you access home route auth.verify method is called and when it fails it is redirected to home itself creating a loop hence too many redirects error.

Change else condition in auth.verify middleware to redirect to another page like /login

Upvotes: 0

SUIFHUISHF
SUIFHUISHF

Reputation: 21

Use $this->middleware ('admin.verify') instead of $this->middleware(['auth, admin.verify]');. You are getting too many redirects error because both the admin middleware and the constructor are checking if the user is authenticated.

Upvotes: 1

Related Questions