haskell - 如何使用 swagger2 和服务人员记录通用身份验证组合器
问题描述
我有一个自定义身份验证机制,我希望它与servant-swagger 输出的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 实例。
解决方案
看起来servant-swagger
只是还没有添加必要的实例来使其工作,可能是因为它仍被标记为实验性的。如果您正在编写程序而不是库,则可以添加此孤立实例以使其工作:
{-# LANGUAGE ScopedTypeVariables #-}
instance HasSwagger sub => HasSwagger (AuthProtect tag :> sub) where
toSwagger _ = toSwagger (Proxy :: Proxy sub)
请注意,这是一个存根实例,可以使其在编译时“工作”,但不会在文档中生成任何关于身份验证的提及。如果你想要这样,你必须编写一个真正的实现toSwagger
。如果你想这样做,其余的实例可能是一个有用的起点。
推荐阅读
- data-structures - 向量时钟与版本向量的用例是什么?
- c++ - Clang 编译器 (x86):80 位长双精度
- here-api - 如何通过 HERE 地图上的链接 ID 绘制折线?
- c# - 从空白空间创建折线单击
- c++ - 如何有效地搜索嵌套映射(C++)中的键?
- php - PHP:为什么在类本身内部静态调用类函数会解析为 __call 而不是 __callStatic?
- php - 使用 Laravel 集体表单和资源控制器进行输入后,如何在另一个页面上显示用户数据?
- python - from lxml import etree ImportError: DLL load failed: 找不到指定的模块
- azure-active-directory - 如何使用 Azure AD+Pingfederate 执行无头身份验证
- python - How to read files in other directory in python