laravel CSRF token使用方法

PHP piniu 1214浏览 0评论

Laravel默认是开启了CSRF功能,需要关闭此功能有两种方法:

法一

打开文件:app\Http\Kernel.php

把这行注释掉:

\App\Http\Middleware\VerifyCsrfToken::class,

方法二

打开文件:app\Http\Middleware\VerifyCsrfToken.php

修改为:

<?php

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends Middleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, \Closure $next)
    {
        // 使用CSRF
        //return parent::handle($request, $next);
        
        // 禁用CSRF
        return $next($request);
    }


}

使用csrf令牌的方式:

方法一

在form表单中添加隐藏的CSRF 令牌字段 ,如下:

<form method="POST" action="/profile">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    ...
</form>

也可以使用辅助函数 csrf_field 来生成令牌字段。

可以直接提交表单,也可以发送ajax请求,(注:发送ajax post请求时,一定请求参数中一定要包含form表中_token字段及其对应的值

方法二

你可以将csrf令牌保存在 HTML meta 标签中:

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

然后你就可以使用类似 jQuery 的库自动将令牌添加到所有请求的头信息中。

这可以为基于 AJAX 的应用提供简单、方便的 CSRF 保护:

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

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • * 昵称:
  • * 邮箱: