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中调用JAVA
Oct 09 PHP
PHP脚本的10个技巧(7)
Oct 09 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
PHP数据类型的总结分析
Jun 13 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
php curl操作API接口类完整示例
May 21 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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
PHP array操作10个小技巧分享
2011/06/23 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
使用JS动态显示文本
2017/09/09 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
python实现简单井字棋游戏
2020/03/04 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
Jar包的作用是什么
2014/03/30 面试题
人力资源管理求职信
2014/08/07 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python