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') } });