APIFox-自动获取登录状态操作
APIFox-自动获取登录状态操作
概述
作为纯后端开发码农,每次接口开发完的调试很重要,因此每次重复的手动获取登陆状态Token或者直接放行就太麻烦了。
APIFox提供了前置操作,可以很方便的自动获取登录状态,节省大量重复劳动时间。
APIFox中的变量
APIFox中的变量有全局变量、环境变量与临时变量,其中常用的是全局变量和环境变量。
详情参考:https://zhuanlan.zhihu.com/p/550921426?utm_id=0
- 全局变量:存放不同环境请求中共同需要的变量参数。
全局变量操作:pm.globals.get/set
- 环境变量:存放各自环境不同的变量参数。
环境变量操作:pm.environment.get/set
注意:APIFox中还有许多内置变量(不用用户自己创建),如
BASE_URL,通过该变量可以获取不同环境下的前置URL。
具体操作
仅供参考,需要根据自己的项目,微调。
我这里的后端项目登录接口是返回Token与过期时间间隔(秒),具体设置操作如下。
1. 创建变量
- 由于我的开发环境(本地)与测试环境的用户名和密码是一样的,所以我将其添加到了全局变量。
- 由于我这里 开发环境(本地)后端项目与测试环境后端项目 使用的是同一个数据库,因此当切换环境后,会由于再次请求(再次请求因为另一个环境中的Token变量可能是空的或者过期了)而造成原本环境的Token失效(因为是共用一个数据库,原来的Token在后端由于再次登录被更新了)。所以,我这里将Token变量与过期时间间隔(秒)变量也放在了全局变量中。

2. 创建公共请求头
由于本后端项目的Token是放在每次请求的Header中的,所以我将获取到的Token变量直接放到这里。另外,该项目前后端都是JSON格式,所以也加上了Content-type,并定义为JSON格式。

3. 创建公共脚本
自己看注释,自行根据自己的项目微调。
// 定义发送登录接口请求方法
function sendLoginRequest() {// 获取环境里的 前置URL - 这是默认内置的变量,无需手动设置const baseUrl = pm.environment.get("BASE_URL");/*全局变量操作:pm.globals.get/set环境变量操作:pm.environment.get/set参考APIFOX变量操作:https://zhuanlan.zhihu.com/p/550921426?utm_id=0*///由于我的开发环境(本地)与测试环境的用户名和密码是一样的,所以我将其添加到了全局变量// 登录用户名,这里从全局变量 LOGIN_USERNAME 获取,也可以写死(但是不建议)const username = pm.globals.get("LOGIN_USERNAME");// 登录用户名,这里从全局变量 LOGIN_PASSWORD 获取,也可以写死(但是不建议)const password = pm.globals.get("LOGIN_PASSWORD");// 构造一个 POST x-www-form-urlencoded 格式请求。这里需要改成你们实际登录接口的请求参数。const loginRequest = {url: baseUrl + "/sys/login",method: "POST",// body 为 json 格式header: {"Content-Type": "application/json"// 注意:header 需要加上 Content-Type},body: {mode: 'raw',// 此处为 rawraw: JSON.stringify(// 这里和自己的后端项目需要的格式对应{"userName": username,"password": password}), // 序列化后的 json 字符串}};// 发送请求。// pm.sendrequest 参考文档: https://www.apifox.cn/help/app/scripts/api-references/pm-reference/#pm-sendrequestpm.sendRequest(loginRequest, function (err, res) {if (err) {console.log(res);console.log(err);} else {// 读取接口返回的 json 数据。// 如果你的 token 信息是存放在 cookie 的,可以使用 res.cookies.get('token') 方式获取。// cookies 参考文档:https://www.apifox.cn/help/app/scripts/api-references/pm-reference/#pm-cookiesconst jsonData = res.json();console.log(jsonData);// 将 accessToken 写入环境变量 ACCESS_TOKENpm.environment.set("ACCESS_TOKEN", jsonData.token);/*这里由于我请求的后端项目的Token过期期间返回的是秒,所以需要处理一下,变为毫秒所以过期期间为:当前时间+有效毫秒*/// 将 accessTokenExpires 过期时间写入环境变量 ACCESS_TOKEN_EXPIRESpm.environment.set("ACCESS_TOKEN_EXPIRES",new Date().getTime()+(jsonData.expire*1000));}});}// 获取全局变量里的 ACCESS_TOKENconst accessToken = pm.globals.get("ACCESS_TOKEN");// 获取全局变量里的 ACCESS_TOKEN_EXPIRESconst accessTokenExpires = pm.globals.get("ACCESS_TOKEN_EXPIRES");/*由于我这里 开发环境(本地)后端项目与测试环境后端项目 使用的是同一个数据库,因此当切换环境后,会由于再次请求(再次请求因为另一个环境中的Token变量可能是空的或者过期了)而造成原本环境的Token失效(因为是一个数据库,原来的Token在后端由于再次登录被更新了)。解决方式:开发环境(本地)与测试环境 的 Token变量与过期时间间隔变量 改变位置存放在全局变量,开发环境与测试环境共用。*/// 如 ACCESS_TOKEN 没有值,或 ACCESS_TOKEN_EXPIRES 已过期,则执行发送登录接口请求if (!accessToken ||(new Date(accessTokenExpires) <= new Date())){sendLoginRequest();}
4. 为项目根目录添加前置脚本
我这里的项目是单体项目,因此子接口直接继承父目录的设置就好了。

参考博文
https://apifox.com/blog/cookies-and-token/
https://zhuanlan.zhihu.com/p/550921426?utm_id=0
https://apifox.com/help/environment-and-variables/environment-management
https://blog.csdn.net/sinat_15872851/article/details/128842095
相关文章:
APIFox-自动获取登录状态操作
APIFox-自动获取登录状态操作 概述 作为纯后端开发码农,每次接口开发完的调试很重要,因此每次重复的手动获取登陆状态Token或者直接放行就太麻烦了。 APIFox提供了前置操作,可以很方便的自动获取登录状态,节省大量重复劳动时间。…...
【NDK系列】Android tombstone文件分析
文件位置 data/tombstone/tombstone_xx.txt 获取tombstone文件命令: adb shell cp /data/tombstones ./tombstones 触发时机 NDK程序在发生崩溃时,它会在路径/data/tombstones/下产生导致程序crash的文件tombstone_xx,记录了死亡了进程的…...
CentOS7 Hive2.3.8安装
CentOS7 Hive2.3.8 安装 建议从头用我的博客,如果用外教的文件到 一、9)步骤了,就用他的弄完,数据库不一样,在9步骤前还能继续看我的 一、 安装MySQL 0.0)查询mariadb,有就去0.1),没有就不管…...
代码随想录算法训练营第四十四天 完全背包 、零钱兑换 II 、组合总和 Ⅳ
代码随想录算法训练营第四十四天 | 完全背包 、零钱兑换 II 、组合总和 Ⅳ 完全背包 题目链接:题目页面 (kamacoder.com) 解释一、01背包 一维 :为什么要倒序遍历背包? 首先要明白二维数组的递推过程,然后才能看懂二维变一维的…...
【经验】vscode 鼠标拖曳不能选中整行文字,只能选中纵向矩形范围
1、问题描述 不知道昨天操作vscode设置界面时,误选择了啥,导致鼠标拖曳不能选中整行文字,只能选中纵向矩形范围,现象如下: 2、解决方法 1)打开设置界面 点击左下角按键,选择“设置” 2&…...
Redis--事务机制的详解及应用
Redis事务的概念: Redis事务就是将一系列命令包装成一个队列,在执行时候按照添加的顺序依次执行,中间不会被打断或者干扰,在执行事务中,其他客户端提交的命令不可以插入到执行事务的队列中,简单来说Redis事…...
路由器端口映射如何配置?
在网络通信中,路由器是一个重要的设备,它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置,可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…...
力扣34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
Problem: 34. 在排序数组中查找元素的第一个和最后一个位置 文章目录 题目描述思路复杂度Code 题目描述 思路 Problem: 二分查找常用解题模板(带一道leetcode题目) 直接套用上述中的寻找左、右边界的二分查找模板即可 复杂度 时间复杂度: O ( l o g n )…...
【每日一题】3.2 求逆序对
题目描述 给定一个长度为 n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i个和第 j个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数 n…...
NTP时间源服务器(NTP网络时钟)助力智慧医院数字化
NTP时间源服务器(NTP网络时钟)助力智慧医院数字化 NTP时间源服务器(NTP网络时钟)助力智慧医院数字化 目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。 随着计算机网络应用的不断涌现,计算机的时…...
Benchmark学习笔记
小记一篇Benchmark的学习笔记 1.什么是benchmark 在维基百科中,是这样子讲的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…...
Linux中的动静态库
目录 一、静态库 (1)静态库的优缺点: (2)Linux下静态库的创建和执行 1.直接编译编辑 2.指定路径和库名 3.用LIBRARY_PATH环境变量来配置路径 二、动态库 (1)动态库的优缺点 ÿ…...
C/C++基础语法
C/C基础语法 文章目录 C/C基础语法头文件经典问题链表链表基础操作 秒数转换闰年斐波那契数列打印n阶菱形曼哈顿距离菱形图案的定义大数计算 输入输出格式化输入输出getline()函数解决cin只读入一个单词的问题fgets读入整行输出字符数组(两种方式puts和printf&#…...
Home Assistant:基于Python的智能家居开源系统详解
Home Assistant:基于Python的智能家居开源系统详解 在数字化和智能化的时代,智能家居系统成为了现代家庭的新宠。它们能够让我们更加方便地控制家中的各种设备,实现自动化和个性化的居住体验。其中,Home Assistant作为一款基于Pyt…...
使用vscode进行简单的多文件编译
安装好必要的插件后(如C/C,code runner等)默认生成task.json即可进行单文件运行 涉及到多文件情况可以修改task.json如下: {"version": "2.0.0","tasks": [{"type": "cppbuild&quo…...
Python实现PPT演示文稿中视频的添加、替换及提取
无论是在教室、会议室还是虚拟会议中,PowerPoint 演示文稿都已成为一种无处不在的工具,用于提供具有影响力的可视化内容。PowerPoint 提供了一系列增强演示的功能,在其中加入视频的功能可以大大提升整体体验。视频可以传达复杂的概念、演示产…...
Mysql学习之MVCC解决读写问题
多版本并发控制 什么是MVCC MVCC (Multiversion Concurrency Control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之࿰…...
Linux下如何生成coredump文件
引言 在linux下执行程序,当出现coredump时,却发现没有生成core文件,或者生成了core文件却不知道在哪里,下面就讲述如何产出core文件,以及指定core文件的产出格式与路径。 打开core文件的大小限制 ulimit -c unlimit…...
eltable 合计行添加tooltip
eltable 合计行添加tooltip 问题描述: eltable 合计行单元格内容过长会换行,需求要求合计行数据超长显示 … ,鼠标 hover 时显示提示信息。 解决方案:eltable合计行没有对外的修改接口,想法是 自己实现一个tooltip&a…...
Secure Boot(安全启动)
Secure Boot(安全启动)的原理基于链式验证,这是一种确保计算机在启动过程中只加载和执行经过认证的软件的机制。这个过程涉及到硬件、固件和操作系统的多个层面。以下是Secure Boot的基本原理: 密钥和证书:Secure Boot…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
