Я использую комбинацию 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]
^
Directive[Future[T]]
? Если вы хотите вернутьDirective[T]
изFuture[T]
, это блокирующая операция, что очень плохо. - person 4lex1v   schedule 07.10.2013Future
есть директивыCompletionMagnet
илиonSuccess
, которые могут справиться с этим. - person 4lex1v   schedule 07.10.2013cookieAuth
должен работать, подпись правильная, а в чем проблема? - person 4lex1v   schedule 07.10.2013val cookieAuth: Directive1[String]
, не пропустите номер1
вDirective1
, сама директива принимает параметры типа с верхней границейHList
- person 4lex1v   schedule 07.10.2013