axios 如何使用相同的令牌直到过期?

vuv7lop3  于 2023-01-05  发布在  iOS
关注(0)|答案(1)|浏览(138)

在下面的代码中,我将调用LoginAPI进行授权,并将token作为状态(Login.e2e.ts)写入。顺便说一下,在我的axios. ts文件中使用axios interceptor. request。
我的问题是**
如果我使用下面的代码逻辑,当我在我的项目中使用customAxios发送请求时,每次await LoginAPI.API.Signin.run()都会为每个API请求运行。很快,我就可以有100个API调用。我不想每次运行await LoginAPI.API.Signin.run(),因为我可以接受429个错误。

    • 新的逻辑应该是这样的;**

我想先获取一个令牌,然后使用它直到它过期。如果令牌过期,然后发送一个新的请求,并获得一个新的令牌。如何使用JavaScript或TypeScript做到这一点?

    • 这是我的Login.e2e.ts文件**
import api from "api/core"
import { expect } from "@playwright/test";

export const LoginAPI = {

  States: {
    token: {} as string
  },

  API: {
    Signin: {
      notes: "user login",
      run: async () => {
        let res: any = await api.test.LoginPost(process.env.NAME, process.env.PASS)
        LoginAPI.States.token = res.data.token
        expect(res.status).toBe(200)
      },
    },

  },
};
    • 这是我的axios. ts文件**
import axios from "axios";
import { LoginAPI } from "../playwright/tests/login/login.api";

const customAxios = axios.create({
    baseURL: process.env.ENV === '1' ? "https://test1" : process.env.ENV === '2' ? "https://test2" : "https://test3",
});

customAxios.interceptors.request.use(
    async (config) => {
       await LoginAPI.API.Signin.run()
        if (config.headers) {
            config.headers['Authorization'] = `Bearer ${LoginAPI.States.token}`;
            return config;
        }
        return config;
    },
    (error) => {
        Promise.reject(error);
    }
);
export default customAxios

首先获取一个令牌,然后使用它直到它过期。如果令牌过期,则发送一个新请求并获取一个新令牌。上述代码应更改为以下逻辑

lrl1mhuk

lrl1mhuk1#

我建议你登录一次,从browser.context()中获取cookie,并将其保存为JSON文件,然后在剩下的测试中使用这个cookie状态/会话,这样你就不必每次都登录来进行新的测试或测试套件。
更多关于storageState(options)的信息请参见官方文档。
在您的全局设置和拆卸中使用storageState(options)的示例,请参见官方文档。

相关问题