hapi-swaggered icon indicating copy to clipboard operation
hapi-swaggered copied to clipboard

Not able to display the authenticate button

Open samylaumonier opened this issue 7 years ago • 4 comments

Hi @z0mt3c, I'm trying to configure hapi-swaggered but I'm not able to display the authenticate button. Do you have a working example using the authorization option? Even with your example code, the configuration seems to be useless.

const Hapi = require('hapi');
const Joi = require('joi');

const server = Hapi.Server({ port: 8000 });

(async () => {
  await server.register([
    require('inert'),
    require('vision'),
    {
      plugin: require('hapi-swaggered'),
      options: {
        tags: {
          'foobar/test': 'Example foobar description',
        },
        info: {
          title: 'Example API',
          description: 'Desc...',
          version: '1.0',
        },
      },
    },
    {
      plugin: require('hapi-swaggered-ui'),
      options: {
        title: 'Example API',
        path: '/docs',
        authorization: {
          field: 'apiKey',
          scope: 'query', // header works as well
          // valuePrefix: 'bearer', // prefix incase
          defaultValue: 'demoKey',
          placeholder: 'Enter your apiKey here',
        },
        swaggerOptions: {
          validatorUrl: null,
        },
      },
    },
  ]);

  server.route({
    path: '/',
    method: 'GET',
    async handler(request, h) {
      return await h.redirect('/docs');
    },
  });

  server.route({
    path: '/foobar/test',
    method: 'GET',
    options: {
      tags: ['api'],
      description: 'My route description',
      notes: 'My route notes',
      handler() {
        return {};
      },
    },
  });

  server.route({
    path: '/foobar/{foo}/{bar}',
    method: 'GET',
    options: {
      tags: ['api'],
      validate: {
        params: {
          foo: Joi.string()
            .required()
            .description('test'),
          bar: Joi.string().required(),
        },
      },
      handler() {
        return {};
      },
    },
  });

  try {
    await server.start();
    console.log('started on http://localhost:8000');
  } catch (err) {
    console.error(err);
  }
})();

Result: capture d ecran 2017-12-17 a 23 40 07

Thanks, Samy

samylaumonier avatar Dec 17 '17 22:12 samylaumonier

Same here :'(

See here for a workaround : https://github.com/z0mt3c/hapi-swaggered/issues/165

m1m1s1ku avatar Apr 12 '18 19:04 m1m1s1ku

I switched to hapi-swagger...

samylaumonier avatar Apr 18 '18 15:04 samylaumonier

I am using a combination of hapi-swagger to create the swagger definition and hapi-swaggered-ui for the ui. Of course, you can just stick with hapi-swagger for both the swagger definition and ui, but I found that hapi-swaggered-ui to be using a more modern version of swagger ui. Hence, why I combined both libraries. With that combination, you can do the following:

Add a securityDefinitions value to the options for hapi-swagger.

{
    ...options,
    // documentation for security configs: https://swagger.io/docs/specification/2-0/authentication/
    securityDefinitions: {
      'Bearer': {
        type: 'apiKey',
        name: 'Authorization',
        in: 'header'
      }
    },
    security: [{
      'Bearer': []
    }],
    documentationPage: false, // we are using `hapi-swaggered-ui` for the ui, so we turn off the ui for 
    `hapi-swagger`
}

carlos-r-mendoza avatar Jan 07 '19 16:01 carlos-r-mendoza

this not work, plz show one exemple, I go error

"securityDefinitions" is not allowed

tamohugues avatar Apr 06 '19 06:04 tamohugues