如何在Swagger UI中使用自动变量?

发布于 2025-02-11 10:49:38 字数 983 浏览 4 评论 0 原文

在Postman中,我可以自动将变量从响应主体中节省。

例如: 首先,我发送登录请求,并在响应中获得 accessToken refreshtoken 变量。

然后通过Postman测试脚本,我保存了这些变量:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("access_token", jsonData.accessToken);
postman.setEnvironmentVariable("refresh_token", jsonData.refreshToken);

这些变量会在下一个请求中自动更新自己:

“自动更新自身”

问题是我如何在Swagger UI中做同样的事情?

问题是,默认情况下,每次我需要手工写刷新令牌时:

In Postman I can automatically save variables the from response body.

For example:
First I send login request and as response I get accessToken and refreshToken variables.

Sending request

Then by Postman test scripts I save these variables:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("access_token", jsonData.accessToken);
postman.setEnvironmentVariable("refresh_token", jsonData.refreshToken);

These variables automatically updates themselves in next request:

automatically updates themselves

The question is how I can do the same in Swagger UI?

The problem is that by default in Swagger UI every time I need to write refresh token by hand:

Writing by hand

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼眸里的那抹悲凉 2025-02-18 10:49:39

@codingmytra tanks tank tock to your评论,我找到了解决方案。

通过添加这些 useRequestInterceptor useresponseinterceptor 选项, accessToken refreshtoken 变量自动自动更新自己。

app.UseSwaggerUI(swaggerUiOptions =>
            {
                var responseInterceptor = @"(res) => 
                {
                    if(res.obj.accessToken)
                    { 
                        console.log(res.obj.accessToken);
                        const token = res.obj.accessToken;
                        localStorage.setItem('token', token);
                    };
                    if(res.obj.refreshToken)
                    { 
                        console.log(res.obj.refreshToken); 
                        const refresh_token = res.obj.refreshToken; 
                        localStorage.setItem('refresh_token', refresh_token); 
                    }; 
                    return res; 
                }";
                    var requestInterceptor = @"(req) => 
                { 
                    req.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token');
                    req.headers['RefreshToken'] = localStorage.getItem('refresh_token');
                    return req; 
                }";
                swaggerUiOptions.UseResponseInterceptor(Regex.Replace(responseInterceptor, @"\s+", " "));
                swaggerUiOptions.UseRequestInterceptor(Regex.Replace(requestInterceptor, @"\s+", " "));
            });

@CodingMytra tanks to your comment I found a solution.

By adding these UseRequestInterceptor and UseResponseInterceptor options, accessToken and refreshToken variables automatically updates themselves.

app.UseSwaggerUI(swaggerUiOptions =>
            {
                var responseInterceptor = @"(res) => 
                {
                    if(res.obj.accessToken)
                    { 
                        console.log(res.obj.accessToken);
                        const token = res.obj.accessToken;
                        localStorage.setItem('token', token);
                    };
                    if(res.obj.refreshToken)
                    { 
                        console.log(res.obj.refreshToken); 
                        const refresh_token = res.obj.refreshToken; 
                        localStorage.setItem('refresh_token', refresh_token); 
                    }; 
                    return res; 
                }";
                    var requestInterceptor = @"(req) => 
                { 
                    req.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token');
                    req.headers['RefreshToken'] = localStorage.getItem('refresh_token');
                    return req; 
                }";
                swaggerUiOptions.UseResponseInterceptor(Regex.Replace(responseInterceptor, @"\s+", " "));
                swaggerUiOptions.UseRequestInterceptor(Regex.Replace(requestInterceptor, @"\s+", " "));
            });
我喜欢麦丽素 2025-02-18 10:49:39

对于纯JavaScript,请使用ResponseInterceptor(获取令牌)和RequestInterceptor(设置令牌)函数。
参见

  <script>
    window.onload = () => {
      window.ui = SwaggerUIBundle({
        url: 'your_swagger_json.json',
        defaultModelsExpandDepth: -1,
        dom_id: '#swagger-ui',
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        layout: "StandaloneLayout",
        persistAuthorization: true,
        responseInterceptor: function (response) {
          if (response.obj.access_token) {
            let swaggertoken = response.obj.access_token;
            if (swaggertoken) {
              localStorage.setItem("swaggertoken", swaggertoken)
            };
          };
          return response;
        },
        requestInterceptor: function (request) {
          request.headers.access_token = localStorage.getItem("swaggertoken");
          return request;
        },
      });
    };
  </script>

For pure javascript use responseInterceptor (to get the token) and requestInterceptor (to set the token) functions.
See https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/

  <script>
    window.onload = () => {
      window.ui = SwaggerUIBundle({
        url: 'your_swagger_json.json',
        defaultModelsExpandDepth: -1,
        dom_id: '#swagger-ui',
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        layout: "StandaloneLayout",
        persistAuthorization: true,
        responseInterceptor: function (response) {
          if (response.obj.access_token) {
            let swaggertoken = response.obj.access_token;
            if (swaggertoken) {
              localStorage.setItem("swaggertoken", swaggertoken)
            };
          };
          return response;
        },
        requestInterceptor: function (request) {
          request.headers.access_token = localStorage.getItem("swaggertoken");
          return request;
        },
      });
    };
  </script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文