zoukankan      html  css  js  c++  java
  • 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的名字。

     

  • 相关阅读:
    RESTful规范
    浏览器缓存(强缓存和协商缓存)
    react hooks useState更新数据不及时问题及处理
    css提升页面渲染新属性content-visibility
    Mongodb Sort Operations
    mongodb使用小点
    Visual Studio 2017 中的Git源代码控制中使用BeyondCompare 3
    “指纹登录“ -- 项目中用到的两个cordova插件基本使用
    代码段:通过索引获取对应的Excel列名; 索引从0开始,返回形如 A,B,C,...,Z,AA,AB,...,AZ,BA,...,ZZ,AAA,AAB,......
    初学knockoutjs记录9——Bindings 绑定(1 Controling text and appearance 控制文本和外观)
  • 原文地址:https://www.cnblogs.com/kimc1112/p/8488900.html
Copyright © 2011-2022 走看看