APIFox-自动获取登录状态操作

2024-02-27 11:12

本文主要是介绍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-自动获取登录状态操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752206

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解