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保护
相关文章推荐
- 仿迅雷悬浮窗,解决拖放链接时的样式问题
- Code39生成条形码加星号的解决办法以及当扫描枪扫描不到条码的解决办法
- systemd-logind导致ssh登录缓慢解决办法
- 关于在Spring配置特殊bean-分散配置的时候抛出的异常:无法找到元素 'context:component-scan' 的声明 的解决方法
- iOSUICollectionView轮播 解决怎么左滚动到最后到第一个的问题
- MySql数据库不能远程连接的解决办法总结
- Android开发中使用WebView后程序进入后台依旧占用CPU的解决
- Egit的merge合并冲突具体解决方法
- ROS环境下机器人建模(XACRO)及常见问题解决
- 两个线程解决一个线程卡之路
- android studio 编译的时候出现的错误和解决方法
- mysql-5.7.10-winx64 MySQL服务无法启动,服务没有报告任何错误的解决办法
- windows7无法安装dynamips之获取不到网卡故障解决
- 对话框子视图Android自定义Dialog二次调用报错解决方法:The specified child already has a parent. You must call removeView()-java教程
- wing中不能同时使用except和finally的解决办法
- leetcode 3. Longest Substring Without Repeating Characters的c语言解决
- Mirosoft.NET Framework 4.0 安装时发生严重错误(已解决)
- 解决java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s content
- 在连接到SQL Server2005时,在默认的设置下SQL Server不允许进行远程连接可能会导致此失败--的解决
- 如何解决虚拟机下的RedHat Enterprise 4的上网问题