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,不用COM,生成excel文件
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
功能强大的PHP发邮件类
Aug 29 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
php数组指针函数功能及用法示例
Feb 11 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
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
代码生成器 document.write()
2007/04/15 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
python实现清屏的方法
2015/04/30 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
怎样声明子类
2013/07/02 面试题
企业办公室岗位职责
2014/03/12 职场文书
个人银行贷款担保书
2014/04/01 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers