HTTP 中间件相关

HTTP 中间件为过滤访问你的应用的 HTTP 请求提供了一个方便的机制。例如,Laravel 默认包含了一个验证用户的中间件。如果没有经过身份验证,中间件将会将用户重定向至登录页面。然而,如果用户经过了验证,中间件将会允许请求继续在应用中执行下去。

当然,除了身份验证,中间件也可以被用来执行多种多样的任务。一个 CORS 中间件可能负责在所有应用发出去的响应中加入适当的头部。一个日志中间件可能记录所有发送给应用的请求的日志。

Laravel 框架已经自带了一些中间件,包括维护、身份验证、 CSRF 保护等等。所有中间件都位于 app/Http/Middleware 文件夹中。

php artisan make:middleware OldMiddleware
public function handle($request, Closure $next)
    {
        if ($request->input('age') <= 200) {
            return redirect('home');
        }

        return $next($request);
    }

 

正如你看到的,如果用户给出的 age 小于或等于 200,中间件会给客户端返回一个 HTTP 重定向;否则,请求会继续在应用程序中执行下去。只用调用带有 $request 的$next 方法,就可以将请求继续在应用中传递到更深层的逻辑(允许跳过中间件)。

在抵达应用程序之前,请求层层通过一系列中间件是最好的设计。每一层可以对其进行检查,甚至是完全拒绝请求。

 

 

一旦中间件在 HTTP kernel 文件中被定义,你可以在路由选项数组中使用 middleware键来指派:

Route::get('admin/profile', ['middleware' => 'auth', function () {
    //}]);

 

Route::get('/', ['middleware' => ['first', 'second'], function () {
    //}]);

 

Route::get('/', function () {
    //}])->middleware(['first', 'second']);

中间件参数

public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // Redirect...        }

        return $next($request);
    }

中间件参数可以在定义路由时将中间件的名称和参数用 : 隔开来指定。多个参数应当用逗号隔开:

Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
    //}]);

 

转载于:https://my.oschina.net/sharesuiyue/blog/788977

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值