首页 > 其他分享 >Apifox中更新token的两种方式(手动、自动)

Apifox中更新token的两种方式(手动、自动)

时间:2023-04-15 09:35:15浏览次数:36  
标签:调用 登录 手动 接口 token Apifox 全局变量 pm

Apifox 关于token的使用方式
前言,关于token的使用,仅做了简单的demo测试token效果。

1.手动登录获取token
顾名思义,因为只有登录之后才有token的信息,所以在调用其他接口前需要拥有token才能访问。

操作步骤
1)添加全局变量、参数
在右上角环境中配置详细信息:全局参数填写参数名以及默认值
{{token}},并且在全局变量中也可以填写token值。优先级就很高了。

接着在全局变量中也填写对应的本地值。

2)在登录接口运行中添加后置操作
选择提取变量,将token填入,并且根据登录接口返回的数据结构获取对应的token。例如我这里就是data.token。

添加完毕后,就会把登录接口返回的token数据填充到全局变量和全局参数中。但至此还不能实现:登录过后,其他的接口都可以调用了。要执行第3步。

特别注意:后置操作不是在接口文档中保存的,所以获取token的后置操作要保存用例,下次运行用例才能将token填充到全局变量中去。

3)在项目概览中添加Auth
点击项目概览,下方有Auth,目前我使用过API Key 和 Bearer Token。效果都一样,也是将{{token}}填入就好了,这样就是动态的获取全局变量中的token。


4)测试效果
首先是不登录时,调用其他接口的返回状态:

因为之前登陆过,但是token过期了,所以会提示token过期的信息。然后再执行一次登录接口,再观察控制台结果:在控制台可以很清晰的看到全局变量重新填充了。

然后回到其他接口调用:没有发生拦截,成功的执行了接口。


2.自动获取token
自动获取token的方式相对手动获取来说也就是多了一步前置操作,意思就是在调用任意接口前,先执行一次登录接口将token填充到全局变量中,从而避免了token过期或需要手动调用登录接口再调用其他接口

操作步骤
1)新建公共脚本
在项目设置中添加公共脚本:

 

该脚本的主体就是pm.sendRequest(),意思就是调用一次登录接口,其参数也就是接口中所需要的参数,此处都是模拟数据,真实可按照数据库中的账户密码即可。

特别注意:其实不推荐这样写死的url和账户密码、文章末尾有一份比较标准的脚本,参考了官方文档。

2)在项目概览中添加前置操作
只要根据提示就可以把脚本给添加到前置操作中。保存后就可以测试结果了。


3)测试效果

目前接口任然处于一个token过期的状态,但这次不再手动调用登录接口了,而是直接再次运行此接口:


可以看到接口也运行成功,并没有拦截。此时,我们可以通过点击控制台的链接,发现此处就是默认执行了一次登录的接口,所以token也就不会存在过期、或不存在的情况了。


脚本模板
// body 里面的参数需要自己设置对应的
// 定义发送登录接口请求方法
function sendLoginRequest() {
// 获取环境里的 前置URL
// const baseUrl = pm.environment.get('BASE_URL');
// 登录用户名,这里从环境变量 LOGIN_USERNAME 获取,也可以写死(但是不建议)
// const username = pm.environment.get('LOGIN_USERNAME');
// 登录用户名,这里从环境变量 LOGIN_PASSWORD 获取,也可以写死(但是不建议)
// const password = pm.environment.get('LOGIN_PASSWORD');
// 构造一个 POST x-www-form-urlencoded 格式请求。这里需要改成你们实际登录接口的请求参数。
const loginRequest = {
url: 'http://localhost:8888/customer/login',
method: 'POST',
// 若 body 为 x-www-form-urlencoded 格式,mode 为 'urlencoded'
// body: {
// mode: 'urlencoded',
// urlencoded: [
// { key: 'account', value: username },
// { key: 'password', value: password }
// ]
// }
// 若 body 为 form-data 格式,mode 为 'formdata'
// body: {
// mode: 'formdata',
// formdata: [
// { key: 'account', value: username },
// { key: 'password', value: password }
// ]
// }
// 若 body 为 raw 或 json 格式,mode 为 'raw'
header: 'Content-Type:application/json',
body: {
mode: 'raw',
raw: JSON.stringify(
{
"loginAccount":"lisi",
"password":"123456"
})
}
};
// 发送请求。
// pm.sendrequest 参考文档: https://www.apifox.cn/help/app/scripts/api-references/pm-reference/#pm-sendrequest
pm.sendRequest(loginRequest, function (err, response) {
if (err) {
console.log(err);
} else {
// 读取接口返回的 json 数据。
// 如果你的 token 信息是存放在 cookie 的,可以使用 res.cookies.get('token') 方式获取。
// cookies 参考文档:https://www.apifox.cn/help/app/scripts/api-references/pm-reference/#pm-cookies
const res = response.json();
// 将 accessToken 写入环境变量 ACCESS_TOKEN
pm.globals.set('token', res.data.token);
}
});
}
// 获取全局变量里的 TOKEN
// const token = pm.globals.get('token');
// 获取环境变量里的 ACCESS_TOKEN_EXPIRES
// const accessTokenExpires = pm.environment.get('ACCESS_TOKEN_EXPIRES');
// 如 ACCESS_TOKEN 没有值,或 ACCESS_TOKEN_EXPIRES 已过期,则执行发送登录接口请求
// if (!token) {
// sendLoginRequest();
// }
//测试:不进行任何判断,调用其他接口前先调用登录接口
sendLoginRequest();
————————————————
版权声明:本文为CSDN博主「你不要害怕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_53021672/article/details/125643067

标签:调用,登录,手动,接口,token,Apifox,全局变量,pm
From: https://www.cnblogs.com/wangjunjiehome/p/17320521.html

相关文章

  • 如何训练个人的ChatGpt4 - tokengo - 博客园 (cnblogs.com)
    如何训练个人的ChatGpt4-tokengo-博客园(cnblogs.com) 如何在自己的计算机上安装类似ChatGPT的个人AI并在没有互联网的情况下运行它本文旨在为任何人安装此软件。最初它有一个视频,伴随着操作方法,但是事情变化很快,我的三次尝试只是推迟了我发表这篇文章。我以后可能会......
  • gin框架中jwt实战之用户登录返回token
    流程:1、main.go中定义路由login调用user.Login方法2、user.login方法验证用户名,和密码,并生成token返回3、main.go中定义getUserInfo路由,调用user.GetUserInfo的方法4、getUserinfo中调用中间件对用户传过来的token进行验证5、验证通过后返回用户信息文件:main.go路由定......
  • Yunzai-BotQQ账号登录报错:token失效: [禁止登录]你当前使用的QQ版本过低,请前往QQ官网i
    token失效:[禁止登录]你当前使用的QQ版本过低解决方案写在前面:该问题是TX认为账号有被用作BOT的嫌疑,而阻止你登陆。但是由于是我们人类在登陆,用来卡BOT的验证码测试肯定可以通过,TX就用“版本过低”的问题来卡我们!!TX我***网上尝试了许多方法,包括对device.json大改特改,还说什么......
  • Avalonia数据有效性验证与手动设置错误
    示例代码:https://github.com/bodong1987/AvaloniaSamples/tree/main/AvaloniaDataValidation官方文档:https://docs.avaloniaui.net/docs/data-binding/data-validation   Avalonia通过插件来实现数据校验,有三种方法。1.直接在属性的set中抛出异常。(个人不推荐这种方案)2......
  • token验证
    token验证什么是token?我相信很多开发者都或多或少听过基于token的用户鉴权和基于session的用户鉴权,而今天说的token验证就是第一种了。token的意思是“令牌”,是用户第一次登录服务器返回的,它能让用户不需要提交账户和密码就能进行服务器验证身份,它是被放在请求头中一起提......
  • 上传文件时禁止用户手动输入
    常规的Web应用程序中涉及到文件上传的部分都不可避免地会使用到<inputtype="file"/>控件,在上传文件的时候通过点击“浏览”按钮,在弹出的文件选择对话框中选择本地要上传的文件。当然,如果你已经知道要上传的文件的本地路径,也可以复制路径到控件的输入框中(例如要选择的文件的路径特......
  • Struts_token的令牌机制
       通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交。比如在登陆过程中,通过使用redirect,可以让用户登陆之上重定向到后台首页界面,当用户刷新界面时就不会触发重复提交了。或者使用token,隐藏在表单中,当提交时进行token验证,验证失败也不让提交。这......
  • VMWare Horizon Linux 手动场 cannot open display 错误
    环境:系统:rhel7.9horizonagent版本:2209桌面:Gnome问题描述:防火墙已关闭的情况下,在使用LSF交互式任务时不能打开带界面的程序(xhost+已经事先执行过)。解决问题:vim/usr/lib/vmware/viewagent/bin/StartXServer.sh找到xdmcp_opt="-query127.0.0.1-once"改为xdmcp_opt......
  • GridControl手动添加控件
    1、效果privateRepositoryItemButtonEditCreateRepositoryItemButtonEdit(Dictionary<object,string>dicButtons){RepositoryItemButtonEditrepositoryBtn=newRepositoryItemButtonEdit();repositoryBtn.AppearanceDisable......
  • axios实现无感刷新token
    letisRefreshing=false标识当前正在刷新token//重试队列,每一项将是一个待执行的函数形式letrequests=[]axios.interceptors.response.use(response=>{const{code}=response.dataif(code===401){//具体code看和后端定义的是什么,这里是401co......