Laravel5.3+框架定义API路径取消CSRF保护方法详解


Posted in PHP onApril 06, 2020

从Laravel 5.3+开始,API路径被放入了routes/api.php中。我们绝大多数的路径其实都会在web.php中定义,因为在web.php中定义的路径默认有CSRF保护,而API路径默认没有CSRF保护。在Laravel官网文档中写到:/p>

Any HTML forms pointing to POST, PUT, or DELETE routes that are defined in the web routes file should include a CSRF token field. Otherwise, the request will be rejected.

所以,请注意你页面的表单中是否使用了POST、PUT或DELETE方法,如果有,并且你没有在表单中添加相应的CSRF token时,你的请求将会失败。

有时候,我们可能不想要CSRF保护。比如我们想使用第三方软件测试表单提交,或者比如微信公众号接口的开发时,当微信服务器使用POST推送给我们消息时,如果开启了CSRF保护,那么请求肯定是失败的。

在这样的情况下,我们可以使用API路径来取消CSRF保护。

我们有两种办法来定义API Routes。

第一种办法:

将routes放进VerifyCsrfToken这个middleware的$except数组里:

<?php      
  
namespace App\Http\Middleware;    
  
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;    
  
class VerifyCsrfToken extends BaseVerifier    
{      
  /**      
   * The URIs that should be excluded from CSRF verification.      
   *      
   * @var array      
   */      
  protected $except = [      
    '/api/my-route',      
  ];      
}

以上middleware的位置在app/Http/Middleware文件夹中。

第二种方法:

将routes放进api.php里:

<?php      
  
use Illuminate\Http\Request;      
  
/*      
|--------------------------------------------------------------------------      
| API Routes      
|--------------------------------------------------------------------------      
|      
| Here is where you can register API routes for your application. These      
| routes are loaded by the RouteServiceProvider within a group which      
| is assigned the "api" middleware group. Enjoy building your API!      
|      
*/      
  
Route::middleware('auth:api')->get('/user', function (Request $request) {      
  return $request->user();      
});      
  
Route::get('/wechat', 'WechatAPIController@some-method');      
Route::post('/wechat', 'WechatAPIController@some-other-method');

api.php和web.php同处于routes文件夹下。

在api.php中添加的路径,在访问时,我们需要在路径前,加上api/前缀:

//3water.com/api/wechat

好了,这样一来,我们就完成了API路径的定义,或者换句话说,取消了路径的CSRF保护。

本文主要讲解了Laravel框架定义API路径取消CSRF保护的操作方法,更多关于Laravel框架的使用技巧请查看下面的相关链接

PHP 相关文章推荐
php下判断数组中是否存在相同的值array_unique
Mar 25 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
yii操作cookie实例简介
Jul 09 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php简单创建zip压缩文件的方法
Apr 30 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 #PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 #PHP
Laravel框架数据库迁移操作实例详解
Apr 06 #PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 #PHP
Laravel实现批量更新多条数据
Apr 06 #PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 #PHP
TP5框架安全机制实例分析
Apr 05 #PHP
You might like
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
js数组的操作详解
2013/03/27 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
微信小程序云开发之使用云数据库
2019/05/17 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
python妹子图简单爬虫实例
2015/07/07 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
技校毕业生自荐信
2014/06/03 职场文书
学雷锋标语
2014/06/25 职场文书
大学生安全责任书
2014/07/25 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
股东授权委托书范文
2014/09/13 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis