Elixir Phoenix Swagger Определения безопасности - PullRequest
0 голосов
/ 05 декабря 2018

Я интегрировал phoenix_swagger в свой бэкэнд.Я автоматически генерирую свой пользовательский интерфейс Swagger Doc на основе моих контроллеров и использую его для интерактивного тестирования моих конечных точек.

Тем не менее, мои маршруты защищены JWT на предъявителя.Я пытаюсь понять, как определить заголовки авторизации в phoenix_swagger без всякой удачи.

Я очень ценю помощь друзей Elixir!

Для визуального:

swagger_path :create_user do
   post "/api/v1/users/create"
   description "Create a user."
   parameters do
     user :body, Schema.ref(:Create), "User to save", required: true
   end
   response 200, "Success"
 end

 def create_user(conn, query_params) do
   changeset = User.changeset(%User{}, query_params)
   with {:ok, user} <- Repo.insert(changeset),
       {:ok, token, _claims} <- Guardian.encode_and_sign(user) do
     conn
     |> Conn.put_status(201)
     |> render("jwt.json", jwt: token)
   else
     {:error, changeset} ->
       conn
       |> put_status(400)
       |> render(ErrorView, "400.json", %{changeset: changeset})
   end
 end

Стандартный Swagger 2.0 JSON Справочник:
Как мне представить «Авторизация: Носитель » в спецификации Swagger (swagger.json)

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Хорошо, я думаю, что понял!Добавление security [%{Bearer: []}] в swagger_path передает маркер авторизации на вызов.

Контроллер:

...
swagger_path :create_user do
  post "/api/v1/users/create"
  description "Create a user."
  parameters do
    user :body, Schema.ref(:Create), "User to save", required: true
  end
  security [%{Bearer: []}]
  response 200, "Success"
end

def create_user(conn, query_params) do
  changeset = User.changeset(%User{}, query_params)
  with {:ok, user} <- Repo.insert(changeset),
      {:ok, token, _claims} <- Guardian.encode_and_sign(user) do
    conn
    |> Conn.put_status(201)
    |> render("jwt.json", jwt: token)
  else
    {:error, changeset} ->
      conn
      |> put_status(400)
      |> render(ErrorView, "400.json", %{changeset: changeset})
  end
end
...

Маршрутизатор:

...
def swagger_info do
  %{
    info: %{
      version: "0.0.1",
      title: "Server"
    },
    securityDefinitions: %{
      Bearer: %{
        type: "apiKey",
        name: "Authorization",
        in: "header"
      }
    }
  }
end
...
0 голосов
/ 08 декабря 2018

Это то, что мне нужно посмотреть в себя.Вот пара ссылок, которые могут помочь.

https://github.com/xerions/phoenix_swagger/blob/master/docs/getting-started.md#router

https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object

...