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 相关文章推荐
如何给phpadmin一个保护
Oct 09 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
smarty高级特性之过滤器的使用方法
Dec 25 PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
Feb 15 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实现的验证码文件类实例
2015/06/18 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
办理生育手续介绍信
2014/01/14 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
国旗下演讲稿
2014/05/08 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js