現在、次のように、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
ます。ディレクティブのパラメーターとして を渡しても問題ありませんが、その方法がわかりません。Future
ask が返す を処理します。
Akka HTTP に付属する例はどれDirective1
もこれを行うようには見えません (少なくとも私は見つけることができませんでした) が、ディレクティブを返す例がRoute
あります。
私がやりたいことは可能ですか?StandardRoute
ユーザー資格情報のフィールドを持つサブクラスを作成し、それを何らかの形で返す方法はありますか?