每个Route :: group禁用Web中间件

时间:2016-05-26 16:57:50

标签: laravel routes middleware

在Laravel 5.2中,默认情况下,Web中间件包含在所有路由中。但是,我想为我的Api路由组中的所有路由禁用此中间件,而无需在每个控制器中指定忽略Web中间件。

我不希望一起删除中间件,因为这是一个混合应用程序,为两种类型的客户端提供服务,但仍需要xsrf检查。有没有办法忽略或除了'每个路由组的中间件?

2 个答案:

答案 0 :(得分:2)

我的方法

您可以将Integer文件与另一个文件分开。检查routes课程。在RouteServiceProvider方法中,添加另一行:

map

然后添加public function map(Router $router) { $this->mapWebRoutes($router); // This method will register your routes which doesn't need 'web' middleware $this->mapNoMiddlewareRoutes($router); } 方法:

mapNoMiddlewareRoutes

}

最后,在protected function mapNoMiddlewareRoutes(Router $router) { $router->group([ 'namespace' => $this->namespace, ], function ($router) { require app_path('Http/no_middleware_routes.php'); }); } 文件夹中添加no_middleware_routes.php文件。

app/Http

第二种方法

根据this文章,您可以使用Route::get('/foo', function () { return ['foo' => 'bar']; }); 属性。

except
  

从示例中可以看出,您可以使用通配符进行路由匹配,也可以单独定义每个通配符。在内部,此数组通过$ request->运行,您可以在请求文档中找到有关该数组的更多详细信息。

CSRF Protection文档

上阅读更多内容

答案 1 :(得分:0)

从Laravel 7.7开始,您可以使用excluded_middleware属性,例如:

Route::group([
    'prefix' => 'forgot-password',
    'excluded_middleware' => ['auth'],
], function () {
    Route::post('send-email', 'ForgotPasswordController@sendEmail');
    Route::post('save-new-password', 'ForgotPasswordController@saveNewPassword');
});