我正在使用 cookie 和基本身份验证的组合。在基本认证中,它需要一个函数
Option[UserPass] => Future[Option[T]]
并返回一个Directive[T]
。
我希望在 cookie 上创建一个带有函数的指令
HttpCookie => Future[T]
并返回一个Directive[T]
。
因此我可以执行 cookieAuth | 的组合身份验证指令basicAuth
.
我能得到的最接近的是:
def myFunction:HttpCookie => Future[String]
val cookieAuth:Directive[String] = cookie("MyCookie").flatMap { cookie =>
onSuccess(myFunction(cookie))
}
但是签名不匹配。我得到了异常(exception):
type mismatch;
found : spray.routing.Directive[shapeless.::[String,shapeless.HNil]]
required: spray.routing.Directive[String]
^
最佳答案
tl;dr 生成 Directive1[String]
类型的结果。
最初的问题是类型不匹配。纯 Directive
特征采用上限为 HList
的类型参数,因此结果类型基于 Shapeless 的 HList
Directive[String : :HNil]
。
在routing
包对象中声明为Directive[HNil]
和Directive[T::HNil]
的alises类型,Directive0分别是
和 Directive1[T]
。
关于scala - 如何同时使用cookie和BASIC认证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19222578/