Laravel 禁用每个路由的web中间件::组
在Laravel 5.2中,默认情况下,所有路由都包含web中间件。但是,我希望对Api路由组中的所有路由禁用此中间件,而不必在每个控制器中指定忽略web中间件 我不希望同时删除中间件,因为这是一个混合应用程序,服务于这两种类型的客户端,仍然需要xsrf检查。有没有办法忽略或“排除”每个路由组的中间件?我的方法 您可以将Laravel 禁用每个路由的web中间件::组,laravel,routes,middleware,Laravel,Routes,Middleware,在Laravel 5.2中,默认情况下,所有路由都包含web中间件。但是,我希望对Api路由组中的所有路由禁用此中间件,而不必在每个控制器中指定忽略web中间件 我不希望同时删除中间件,因为这是一个混合应用程序,服务于这两种类型的客户端,仍然需要xsrf检查。有没有办法忽略或“排除”每个路由组的中间件?我的方法 您可以将路由文件分离到另一个文件中。检查RouteServiceProviderclass。在map方法中,添加另一行: public function map(Router $rout
路由
文件分离到另一个文件中。检查RouteServiceProvider
class。在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');
});
}
}
最后,在app/Http
文件夹中添加no\u middleware\u routes.php
文件
Route::get('/foo', function () {
return ['foo' => 'bar'];
});
第二种方法
根据文章,您可以使用除属性之外的
// app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'webhook/*'
];
从示例中可以看到,可以使用通配符进行路由匹配,也可以单独定义每个通配符。在内部,这个数组是通过$request->is运行的,您可以在requests文档中找到关于它的更多详细信息
阅读更多文档,因为Laravel 7.7您可以使用排除的中间件
属性,例如:
Route::group([
'前缀'=>'忘记密码',
“已排除的_中间件”=>['auth'],
],函数(){
路线::post('发送电子邮件','ForgotPasswordController@sendEmail');
路由::post('save-new-password','ForgotPasswordController@saveNewPassword');
});
这看起来会起作用……我现在会尝试一下,但可能会考虑覆盖路由中间件加载程序,以提供一个“except”方法,考虑到它存在于控制器中间件中,我认为该方法已经存在。请参见此