自定义中间件 - 重定向过多 - Laravel

Custom Middleware - Too Many Redirects - Laravel

我想创建一个自定义中间件,只有当用户通过身份验证并且电子邮件是特定电子邮件才能访问/admin 页面。

虽然,当我指定我的自定义路由然后重定向时,它总是说重定向太多..

简短说明。

  1. 用户登录 -> 重定向到 /home。 (作品)
  2. 如果用户尝试访问 /admin 并且他们的电子邮件与中间件中指定的不同,则重定向到 /home。
  3. 如果是真的,让他们进入/admin

我的中间件叫做'admin.verify'

路由文件会自动加载,如果我执行 redirect('/home') 它会自动运行我的中间件,这就是我猜测它过于频繁地重定向到主页的原因。

路由文件:

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

管理员控制器:

<?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');
    }
}

中间件:

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

      if (Auth::check() && Auth::User()->email == 'Tester@gmail.com') {
        return $next($request);
      } else {
        return redirect()->route('home');
      }

我的家乡路线:

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

家庭控制器:

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');
    }
}

正如评论中所讨论的,您已经在全局中间件堆栈下注册了它,每个请求都会 运行s。意思是,如果第一个条件失败,您将不断重定向到 'home',因为此中间件将在 'home'(以及所有其他)路由上成为 运行。所以你会去:

/some/page ... condition failed: redirect 'home'
/home ... condition failed: redirect 'home'
/home ... condition failed: redirect 'home' ... and so on

在 app/Http/Kernel.php 中,您有三个部分:

$middleware,全局中间件堆栈(每个请求 运行s)

$middlewareGroup,运行s 对组的每个请求(web、api 等)。 routes/web.php 中的任何内容都将 运行 通过 'web' 组。

$routeMiddleware,可在特定路由上启用的路由特定中间件。