Elixir Phoenix Swagger安全定义



我已经将phoenix_swagger集成到我的后端。我正在基于我的控制器自动生成我的swagger文档UI,并使用它来交互测试我的端点。

尽管如此,我的路线是由Bearer JWT保证的。我正试图弄清楚如何在phoenix_swagger中定义授权头,但绝对没有运气。

我真的很感谢长生不老药的朋友们的帮助!

对于视觉:

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引用:
我如何表示';授权:Bearer<令牌>#39;在Swagger规范(Swagger.json(中

好吧,我想我明白了!将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
...

这是我自己需要研究的问题。这里有几个链接可能会有所帮助。

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-目标

最新更新