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实现小型站点广告管理
Oct 09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
PHP操作文件方法问答
Mar 16 PHP
PHP脚本中include文件出错解决方法
Nov 20 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
PHP 基于文件头的文件类型验证类函数
May 01 PHP
php利用事务处理转账问题
Apr 22 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
laravel 实现用户登录注销并限制功能
Oct 24 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/04 日漫
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
如何打开php的gd2库
2017/02/09 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
Python写的英文字符大小写转换代码示例
2015/03/06 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
C语言50道问题
2014/10/23 面试题
关于公司年会的开幕词
2016/03/04 职场文书
股东出资协议书
2016/03/21 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技