如何一起使用cookie和BASIC身份验证?

时间:2013-10-07 10:35:42

标签: scala spray

我正在使用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))
}

但是签名不匹配。我得到了例外:

type mismatch;
  found   : spray.routing.Directive[shapeless.::[String,shapeless.HNil]]
  required: spray.routing.Directive[String]
         ^ 

1 个答案:

答案 0 :(得分:3)

tl; dr 生成Directive1[String]类型的结果。

最初的问题是类型不匹配。纯Directive特征采用类型参数,其上限为HList,因此结果类型基于Shapeless的HList Directive[String :: HNil]

routing声明的包对象中,分别为Directive[HNil]Directive[T :: HNil]Directive0Directive1[T]输入alises。

相关问题