课程内容

什么是中间件

我们可以通俗的理解为防火墙或者是一扇门
在我们进入某个地方的时候打开门,那么门需要一把钥匙,这把钥匙必须匹配才能够进去,并不是说所有的钥匙都能进去。
Laravel 自带了一些中间件,包括身份验证、CSRF 保护等。app/Http/Middleware里面已经定于好了几个

前置 & 后置中间件

写在前面就是前面,写在后面就是后面

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // 执行一些任务
        //在这里写的页面代码就是前面
        return $next($request);
    }
}
<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // 看到没有,$next($request);写在上面,那么我下面写的就是后面的了
        //

        return $response;
    }
}

注册中间件

$routeMiddleware =数组里面给他加一个元素即可

中间件组

$middlewareGroups =里面增加即可,可以直接写到类对应,也可以在单个别名key里面调用

中间件参数

参数调用

Route::put('post/{id}', function ($id) {
    //
})->middleware('role:editor');
<?php

namespace App\Http\Middleware;

use Closure;

class CheckRole
{
    /**
     * 处理传入的参数
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // Redirect...
        }

        return $next($request);
    }

}

什么是 CSRF

跨站请求伪造的意思
XSS 利用的是用户对指定网站的信任CSRF 利用的是网站对用户网页浏览器的信任

Laravel CSRF 保护

Blade 指令

@csrf

方法

csrf_token(); 

CSRF 白名单

app/Http/Middleware/VerifyCsrfToken.php

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * 从CSRF验证中排除的URI
     *
     * @var array
     */
    protected $except = [
       'stripe/*',
        '/foo/bar',
        '/foo/*',
    ];
}

javascript 应用

在html 代码中写入

<meta name="csrf-token" content="{{ csrf_token() }}">

ajax,可以通过获取这个值来获取,比如jquery

$(function(){
            $(".jquery-ajax").click(function(){

               var title=$(".js-title").val();
               var content=$(".js-content").val();
                $.ajax({
                    //请求方式
                    type : "POST",
                    //请求地址
                    url : "",
                    //数据,json字符串
                    data : {
                        title:title,
                        content:content,
                        _token:$('[name="csrf-token"]').attr('content')
                    },
                    //请求成功
                    success : function(result) {
                        console.log(result);

                    },
                    //请求失败,包含具体的错误信息
                    error : function(e){
                        console.log(e.status);
                        console.log(e.responseText);
                    }
                });

            })
        })

Jquery 全局使用

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。