laravel middleware

 

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

 

如何使用Laravel的限速中间件

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

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

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

        return Person::all();spa

    });});中间件

让咱们应用一个阀门。默认节流将其限制为每分钟60次尝试,而且若是达到限制,则会禁止其访问一分钟。blog

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的中间件Illuminate\Auth\Middleware\Authorize。它为咱们提供了一种调用Gate的简单方法,并检查它是否容许用户访问某些内容。

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

protected $routeMiddleware = [

    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

    'can' => \Illuminate\Auth\Middleware\Authorize::class,

    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::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', 'Adminpanel\Dashboard@index');

    // future adminpanel routes also should belong to the group

});

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

相关文章
相关标签/搜索