Laravel 合并/交错两个中间件

Laravel combine / interlace two Middlewares

在我的 Laravel 项目中有两种类型的自定义中间件:

  1. 那些检查特定用户类型(导师或学生)是否登录的人
  2. 检查当前用户权限的人

现在我需要结合这两个中间件来检查导师是否登录,以及是否有权输入class。

我的 routes/web.php 看起来像这样:

// check tutor authentication 
Route::group('middleware' => ['auth:tutor']], function(){

    // Display routes that are enabled for all tutors like /profile

    // check if tutor has permission to enter class
    Route::group(['middleware' => 'class.permission'], function(){

       // Display class routes

    });

});

不幸的是,我收到以下错误:Trying to get property 'headers' of non-object 路径:Project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php

我将不胜感激。

这是我以前见过的一个常见错误,很可能你忘记了在你的一个中间件中 return,它需要 return $next 或抛出异常。

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

    return $next($request);
}

不知何故,预配置的身份验证中间件是麻烦制造者。所以我创建了一个自定义的AuthTutor中间件,并在内核中注册为auth.tutor来解决问题。

中间件代码:

public function handle($request, Closure $next)
{
    if (Auth::guard('tutor')->check()) {
      return $next($request);
    } else {
      return redirect()->route('login.tutor');
    }
}

路线代码:

Route::group('middleware' => ['auth.tutor']], function(){ ... }