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 cookies中删除的一般赋值方法
May 07 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
PHP 设计模式之观察者模式介绍
Feb 22 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
浅谈php://filter的妙用
Mar 05 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
解决php扩展安装不生效问题
Oct 25 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之第六天
2006/10/09 PHP
使用adodb lite解决问题
2006/12/31 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
Prototype Function对象 学习
2009/07/12 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
python通过socket查询whois的方法
2015/07/18 Python
python遍历目录的方法小结
2016/04/28 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
python @property的用法及含义全面解析
2018/02/01 Python
Python3内置模块random随机方法小结
2019/07/13 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
关于开学的感想
2015/08/10 职场文书
2016教师节感恩话语
2015/12/09 职场文书
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript