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中MD5函数使用实例代码
Jun 07 PHP
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
一个php导出oracle库的php代码
Apr 20 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
PHP插入排序实现代码
Apr 04 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
php在linux环境中如何使用redis详解
Dec 15 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 url 加密解密函数代码
2011/08/26 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
从0开始的Python学习016异常
2019/04/08 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
Python csv文件记录流程代码解析
2020/07/16 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
局域网标准
2016/09/10 面试题
员工自我鉴定
2013/10/09 职场文书
自我鉴定四大框架
2014/01/17 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
党日活动总结
2014/05/07 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
网络营销计划
2015/01/17 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
入党培养人考察意见
2015/06/08 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
优秀大学生申请书
2019/06/24 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers