Как документируются генераторы обобщенной аутентификации с помощью swagger2 и servant - PullRequest
2 голосов
/ 07 января 2020

У меня есть собственный механизм аутентификации, который я хотел бы совместить с выводом моих документов swagger через servant-swagger.

data AuthUser = AuthUser 
  { auth_user_id :: Int64 
  , auth_user_email :: Text
  } deriving (Eq, Show, Generic)

type instance AuthServerData (AuthProtect "JWT") = AuthUser

Это происходит в заголовке авторизации. В настоящее время я получаю следующую ошибку:

    • No instance for (HasSwagger
                         (Servant.API.Experimental.Auth.AuthProtect "JWT"
                          Servant.API.Sub.:> Servant.API.Verbs.Get
                                               '[Servant.API.ContentTypes.JSON] Int))

Для этого маршрута:

:<|> "todo" :> AuthProtect "JWT" :> ReqBody '[JSON] NewTodo :> Post '[JSON] Int64

Есть ли документация для написания экземпляра HasSwagger для обобщенной аутентификации.

1 Ответ

1 голос
/ 07 января 2020

Похоже, servant-swagger просто еще не добавил необходимый экземпляр для этой работы, возможно, поскольку он все еще помечен как экспериментальный. Если вы пишете программу, а не библиотеку, вы можете добавить этот экземпляр-сироту, чтобы он работал:

{-# LANGUAGE ScopedTypeVariables #-}

instance HasSwagger sub => HasSwagger (AuthProtect tag :> sub) where
  toSwagger _ = toSwagger (Proxy :: Proxy sub)

Обратите внимание, что это экземпляр-заглушка, который заставит его «работать», как при компиляции, но это не будет генерировать упоминание аутентификации в документации. Если вы хотите этого, вам нужно написать реальную реализацию toSwagger. Если вы хотите сделать это, остальные экземпляры , вероятно, будут полезной отправной точкой.

...