您的位置:首页 > 编程语言 > PHP开发

Laravel VerifyCsrfToken 报错解决

2018-02-08 11:01 435 查看

♩. 报错情况

form 表单进行 post 方式提交数据时,遇到如下的报错情况

TokenMismatchException  in VerifyCsrfToken.php line 67:
in VerifyCsrfToken.php line 67
at VerifyCsrfToken->handle(object(Request), object(Closure))




如果配置并开启了Debugbar,可能会得到如下的报错信息

...
return $this->addCookieToResponse($request,$next($request));
}
throw new TokenMismatchException;




♪. 原因

Laravel 推荐在全局注册 VerifyCsrfToken 的 Middleware ,对所有 Post、Put、Delete 请求自动校验是否带合法的
_csrf token


♫. 解决方法

方法 ①

在form表单中添加如下的隐藏域代码

<input type="hidden" name="_token" value="{{ csrf_token() }}" />


方法 ②

在form表单中添加
csrf_field
(与上述解决方法功能一致)

{!! csrf_field() !!}


方法 ③

注释 Kernel.php 代码

打开 app\Http\Kernel.php,在文件中注释掉下面的代码

\App\Http\Middleware\VerifyCsrfToken::class


方法 ④

修改handle()方法

打开 \app\Http\Middleware\VerifyCsrfToken.php,添加或修改 handle()方法如下:

public function handle($request, \Closure $next)
{
// 使用CSRF
//return parent::handle($request, $next);
// 禁用CSRF
return $next($request);
}


方法 ⑤

[适用于 Laravel5.5,取消请求的 csrf_token验证,不是取消全部]

跟上述的方法4 类似,打开
app\Http\Middleware\VerifyCsrfToken.php
文件,找到

protected $except = [

];


例如我要 http://xx.com/api/ 下面的都跳过验证,可改成如下所示:

protected $except = [

'api/*'

];


举例:



♬. 补充 csrf 介绍



§ 参考文章

1. Laravel 5.3 文档 - CSRF攻击原理及其防护

2. Laravel 5.3 文档 - HTTP层 CSRF保护
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  laravel5
相关文章推荐