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