現在、次のように、Akka HTTP アプリでリソースを保護するために使用しているディレクティブがあります。
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)
}
whereLoggedInUser.findByAccessToken()はデータベースに対してブロッキング クエリを作成します。これを非同期用にask、同じデータを提供できるアクターに切り替えたいと思いActorRefます。ディレクティブのパラメーターとして を渡しても問題ありませんが、その方法がわかりません。Futureask が返す を処理します。
Akka HTTP に付属する例はどれDirective1もこれを行うようには見えません (少なくとも私は見つけることができませんでした) が、ディレクティブを返す例がRouteあります。
私がやりたいことは可能ですか?StandardRouteユーザー資格情報のフィールドを持つサブクラスを作成し、それを何らかの形で返す方法はありますか?