我已将 phoenix_swagger 集成到我的后端中。我正在根据我的 Controller 自动生成我的 swagger 文档 UI,并使用它来交互式测试我的端点。
尽管如此,我的路线受到承载 JWT 的保护。我试图弄清楚如何在 phoenix_swagger 中定义授权 header ,但绝对没有运气。
非常感谢Elixir friend 的帮助!
视觉效果:
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 引用:
How can I represent 'Authorization: Bearer <token>' in a Swagger Spec (swagger.json)
最佳答案
好吧,我想我明白了!将 security [%{Bearer: []}]
添加到 swagger_path 会将授权 token 传递给调用。
Controller :
...
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
...
关于jwt - Elixir Phoenix Swagger 安全定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625503/