laravel middleware

$middleware:全局中间件,要对所有的请求要做一些处理的时候,就适合定义在该属性内。(比如统计请求次数这些)
$middlewareGroups:中间件组,比如我们项目有api请求和web的请求的时候,就要把两种类型的请求中间件分离开来,这时候就需要我们中间件组啦。
$routeMiddleware:路由中间件,有些个别的请求,我们需要执行特别的中间件时,就适合定义在这属性里面。

 

如何使用Laravel的限速中间件

因此,请参阅Laravel 5.2中的新功能。有一个throttle可以使用的新中间件。我们来看看我们的API组:

Route::group(['prefix' => 'api'], function () {

    Route::get('people', function () {

        return Person::all();

    });});

让我们应用一个阀门。默认节流将其限制为每分钟60次尝试,并且如果达到限制,则会禁止其访问一分钟。

Route::group(['prefix' => 'api', 'middleware' => 'throttle'], function () {

    Route::get('people', function () {

        return Person::all();

    });});

如果您向此api/people路线发出请求,您现在将在响应标题中看到以下行:

HTTP/1.1 200 OK

... other headers here ...

X-RateLimit-Limit: 60

X-RateLimit-Remaining: 59

请记住,这种回应意味着:

A)此请求成功(状态为200
B)您可以尝试此路线每分钟60次
C)您这一分钟还有59次请求

如果我们超过费率限制,我们会得到什么回应?

HTTP/1.1 429 Too Many Requests

... other headers here ...

Retry-After: 60

X-RateLimit-Limit: 60

X-RateLimit-Remaining: 0

而回应的实际内容将是一个字符串:“尝试太多”。

如果我们在30秒后再次尝试,该怎么办?

HTTP/1.1 429 Too Many Requests

... other headers here ...

Retry-After: 30

X-RateLimit-Limit: 60

X-RateLimit-Remaining: 0

同样的回应,除了Retry-After计时器告诉我们等待多久的时间减少了30秒。

定制throttle中间件

让我们做一些定制。我们希望将其限制为每分钟5次尝试。

Route::group(['prefix' => 'api', 'middleware' => 'throttle:5'], function () {

    Route::get('people', function () {

        return Person::all();

    });});

如果我们想改变它,如果有人达到极限,他们又不能再试10分钟了?

Route::group(['prefix' => 'api', 'middleware' => 'throttle:5,10'], function () {

    Route::get('people', function () {

        return Person::all();

    });});

 

 

 

 

 

Can

 

我们将使用名为Laravel的中间件IlluminateAuthMiddlewareAuthorize。它为我们提供了一种调用Gate的简单方法,并检查它是否允许用户访问某些内容。

幸运的是,它已经启用,但我们无论如何检查。打开文件app/Http/Kernel.php并找到  $routeMiddleware属性,它应该如下所示:

protected $routeMiddleware = [

    'auth' => IlluminateAuthMiddlewareAuthenticate::class,

    'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,

    'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,

    'can' => IlluminateAuthMiddlewareAuthorize::class,

    'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,

    'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,

];

是的,它在那里并响应这个名字can。让我们看看它的行动。

保护路线

首先,让我们创建一个控制器来保护使用下面的工匠  命令(啊,工匠再次):

php artisan make:controller Adminpanel/Dashboard

Dashboard在文件中创建新的控制器app/Http/Controllers/Adminpanel/Dashboard.php

但是,控制器是空的。我们需要创建索引操作,请打开文件并在控制器中插入以下简单方法:

class Dashboard extends Controller{

    public function index() {

        return 'This is the dashboard';

    }

}

现在我们需要创建一个路由并使用中间件来保护它。打开文件routes/web.php并在其结尾处添加以下代码:

Route::group(['middleware' => 'can:accessAdminpanel'], function() {

    Route::get('/adminpanel/dashboard', 'AdminpanelDashboard@index');

    // future adminpanel routes also should belong to the group

});

正如你所看到的,我们创建一个包含所有adminpanel路由的路由组。它允许我们应用一次中间件,并且它将自动应用于组包含的所有路由。
下次有人打开URL时/adminpanel/dashboard,路由器会调用中间件can并传递参数accessAdminpanel,这实际上就是我们Gate的名字。

 

原文地址:https://www.cnblogs.com/kimc1112/p/8488900.html