Obecnie mam dyrektywę, że używam w celu zabezpieczenia zasobów w aplikacji Akka HTTP, tak jak poniżej:Jak korzystać z przyszłości w ramach dyrektywy HTTP Akka?
def authenticate: Directive1[Login] =
optionalHeaderValueByName("Authorization") flatMap {
val accessToken = authz.split(' ').last
case Some(authz) =>
LoggedInUser findByAccessToken accessToken match {
case Some(user) => provide(user)
case None => reject(AuthorizationFailedRejection)
}
case None => reject(AuthorizationFailedRejection)
}
gdzie LoggedInUser.findByAccessToken()
sprawia zapytania blokady przed bazie danych, chciałbym, aby przełączyć to dla asynchronicznej ask
do aktora, który może dostarczyć te same dane, jestem OK z przekazaniem ActorRef
jako parametr do dyrektywy, ale nie mogę się dowiedzieć, jak obsługiwać Future
, że zwraca pytanie.
Żadne z przykładów Directive1
, które pochodzą z Akka HTTP, wydają się tego nie robić (przynajmniej mogłem; t znaleźć dowolne) chociaż istnieją przykłady dyrektyw zwracających Route
, które robią.
Czy to, co chcę robić, nawet możliwe? Czy możliwe jest utworzenie podklasy StandardRoute
z polem dla poświadczeń użytkownika i zwrócenie go w jakiś sposób?
Tak, zadziałało, dziękuję! –