Reputation: 95
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.
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
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
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