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 相关文章推荐
DISCUZ 分页代码
Jan 02 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
解析PHP工厂模式的好处
Jun 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
Apr 23 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php实现的日历程序
2015/06/18 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
dojo 之基础篇
2007/03/24 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
Python聊天室实例程序分享
2016/01/05 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
python之文件读取一行一行的方法
2018/07/12 Python
python查看数据类型的方法
2019/10/12 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
世界经理人咨询有限公司面试
2014/09/23 面试题
《翻越远方的大山》教学反思
2014/04/13 职场文书
党风廉政建设责任书
2014/04/14 职场文书
责任担保书范文
2014/05/21 职场文书
中央空调节能方案
2014/06/15 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript