Laravel结合/交错两个中间件

时间:2019-07-12 16:29:38

标签: laravel laravel-5 laravel-middleware

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

  1. 检查特定用户类型(老师或学生)的人
  2. 检查当前用户权限的人

现在,我需要结合这两种中间件来检查例如导师是否已登录,并且还需要检查导师是否有权输入课程。

我的路由/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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是我以前见过的一个常见错误,很可能您忘记了在其中一个中间件中返回,它需要返回$next或引发异常。

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

    return $next($request);
}

答案 1 :(得分:0)

以某种方式预配置的身份验证中间件是麻烦的制造者。因此,我创建了一个自定义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(){ ... }