Laravel 合并/交错两个中间件
Laravel combine / interlace two Middlewares
在我的 Laravel 项目中有两种类型的自定义中间件:
- 那些检查特定用户类型(导师或学生)是否登录的人
- 检查当前用户权限的人
现在我需要结合这两个中间件来检查导师是否登录,以及是否有权输入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(){ ... }
在我的 Laravel 项目中有两种类型的自定义中间件:
- 那些检查特定用户类型(导师或学生)是否登录的人
- 检查当前用户权限的人
现在我需要结合这两个中间件来检查导师是否登录,以及是否有权输入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(){ ... }