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 DataGrid 实现代码
Aug 12 PHP
php实现网站插件机制的方法
Nov 10 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
从wamp到xampp的升级之路
Apr 08 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
php统计数组元素个数的方法
Jul 02 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
因str_replace导致的注入问题总结
Aug 08 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 反向排序和随机排序代码
2010/06/30 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
浅析return false的正确使用
2013/11/04 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
JQuery基础语法小结
2015/02/27 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python数据预处理方式 :数据降维
2020/02/24 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
入党自我评价优缺点
2014/01/25 职场文书
运动会稿件50字
2014/02/17 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
2014年信访工作总结
2014/11/17 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
机器人总动员观后感
2015/06/09 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python
python的html标准库
2022/04/29 Python