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自动生成月历代码
Oct 09 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
PHP7 字符串处理机制修改
Mar 09 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
第十二节--类的自动加载
2006/11/16 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
PHP7修改的函数
2021/03/09 PHP
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
Python实现基于权重的随机数2种方法
2015/04/28 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
Python实现手势识别
2020/10/21 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
简述安装Slackware Linux系统的过程
2012/01/12 面试题
韩国商务邀请函
2014/01/14 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle