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 19 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
thinkphp常见路径用法分析
Dec 02 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
PHP入门速成(2)
2006/10/09 PHP
PHP strtotime函数详解
2009/12/18 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
理解AngularJs指令
2015/12/10 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
react基本安装与测试示例
2020/04/27 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Python占用的内存优化教程
2019/07/28 Python
Python读取csv文件实例解析
2019/12/30 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
亲子拓展活动方案
2014/02/20 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书