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脚本的10个技巧(5)
Oct 09 PHP
一个简易需要注册的留言版程序
Oct 09 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
php学习之流程控制实现代码
Jun 09 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
PHP查询分页的实现代码
Jun 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
php date与gmdate的获取日期的区别
2010/02/08 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
Moment.js实现多个同时倒计时
2019/08/26 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
举例详解Python中yield生成器的用法
2015/08/05 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
汉语专业毕业生自荐信
2014/07/06 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
长城英文导游词
2015/01/30 职场文书
小学运动会加油稿
2015/07/22 职场文书
分析并发编程之LongAdder原理
2021/06/29 Java/Android
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python