scala - 如何同时使用cookie和BASIC认证?

标签 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))
}

但是签名不匹配。我得到了异常(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/

相关文章:

scala - 无法访问伴随对象的字段

scala - 喷雾路由 404 响应

asp.net - ASP.NET 中的 Akka.NET Actor 系统

Scala 实现抽象基类并在匿名类中混合特征

Scala - 为什么不根据运行时类调用重载方法?

scala - 如何在groupBy之后将值聚合到集合中?

scala - akka http、字符集 header 、utf-8 问题

scala - 如何使用spray RestAPI从服务器端获取http请求头信息

java - Scala项目作为eclipse中Java项目的 "sub-project"