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的名字。

相關文章
相關標籤/搜索