LoopBack 4-在API资源管理器中添加“授权”按钮

时间:2019-04-04 20:42:28

标签: node.js swagger loopbackjs swagger-ui v4l2loopback

我是LoopBack v4的新手,并且尝试与每个请求一起发送授权密钥。 我以前使用过Swagger,并且在单击右侧的“授权”按钮后,曾经添加api密钥。 为了避免由于我的经验不足而导致的错误,我从“ Todo List”示例的全新应用开始。 我尝试(但未成功)按照这篇文章的建议进行操作:Nodejs Loopback 4 add bearer token config into swagger explorer

我所做的是使用以下代码修改文件src/index.ts

export async function main(options: ApplicationConfig = {}) {
  const spec: OpenApiSpec = {
    openapi: '3.0.0',
    info: {
      title: 'LoopBack Application v2',
      version: '1.0.2',
    },
    paths: {
    },
    securityDefinitions: [
      {
        api_key: [
          {
            type: 'apiKey',
            name: 'api_key',
            in: 'header'
          }
        ]
      },
    ],
  };

  const app = new TodoListApplication(options);
  app.api(spec);

  await app.boot();
  await app.start();

  const url = app.restServer.url;
  console.log(`Server is running at ${url}`);
  return app;
}

基本上,我添加了以下行:app.api(spec);和配置securityDefinitionsspec常量更改了titleversion,但是我仍然看不到“授权”按钮。可以肯定的是,我缺少了什么或做错了什么。

感谢您的帮助!谢谢!

2 个答案:

答案 0 :(得分:0)

最后,我添加了“授权”按钮,并使用以下配置在标头中发送api_key

  const spec: OpenApiSpec = {
    openapi: '3.0.0',
    info: {
      title: 'LoopBack Application v2',
      version: '1.0.2',
    },
    paths: {},
    security: [
      {
        api_key: ['api_key'],
      },
    ],
    components: {
        securitySchemes: {
          api_key: {
            type: 'apiKey',
            name: 'api_key',
            in: 'header'
          }
        }
    },
  };

答案 1 :(得分:0)

在文件系统中创建安全规范文件,如下所示:

import {ReferenceObject, SecuritySchemeObject} from '@loopback/openapi-v3';

export const SECURITY_SPEC = [{bearerAuth: []}];
export type SecuritySchemeObjects = {
  [securityScheme: string]: SecuritySchemeObject | ReferenceObject;
};
export const SECURITY_SCHEME_SPEC: SecuritySchemeObjects = {
  bearerAuth: {
    type: 'http',
    scheme: 'bearer',
    bearerFormat: 'JWT',
  },
};

在super(options)下方的XXXX应用程序类的application.ts文件中添加以下代码,并从安全规范文件中导入SECURITY_SCHEME_SPEC和SECURITY_SPEC。

 this.api({
      openapi: '3.0.0',
      info: {title: "package or prject name", version: '1.0'},
      paths: {},
      components: {securitySchemes: SECURITY_SCHEME_SPEC},
      servers: [{url: '/'}],
      security: SECURITY_SPEC
    });

Referance loopback link