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和ACCESS写聊天室(四)
Oct 09 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
php 短链接算法收集与分析
Dec 30 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
Nov 22 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
jquery 选择器部分整理
2009/10/28 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python设计模式之抽象工厂模式
2016/08/25 Python
Python 修改列表中的元素方法
2018/06/26 Python
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
会计助理的岗位职责
2013/11/29 职场文书
小学门卫岗位职责
2013/12/17 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
《开国大典》教学反思
2014/04/19 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
文明家庭事迹材料
2014/12/20 职场文书
上学路上观后感
2015/06/16 职场文书
七年级作文之冬景
2019/11/07 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
Python实现批量自动整理文件
2022/03/16 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers