ユーザーがログインしているかどうかを確認する ActionBuilder を作成しようとしています。ログインしている場合は、ユーザー オブジェクトをリクエスト (AuthenticatedRequest) に追加します。MySQL では、ユーザーを解決しても Future オブジェクトが取得されないため、これは簡単です。しかし、この特定のケースでは、将来の値を返す ReactiveMongo for Play で MongoDB を使用します。
これまでのところ、この小さなスニペットを作成しました。しかし、それは私にタイプの不一致をもたらします:
型の不一致; 見つかった: scala.concurrent.Future[Option[models.User]] => scala.concurrent.Future[Object] 必須: オブジェクト => ?
object Authenticated extends ActionBuilder[AuthenticatedRequest] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = {
import models.User
(for{
sID <- request.session.get("sessionID")
code <- request.session.get("otherCode")
user: Future[Option[User]] <- models.Session.getUserBySessionAndCode(sID, code)
} yield {
(for{
uAbs <- user
} yield {
if(uAbs.isDefined) {
block(AuthenticatedRequest(uAbs.get, request))
}else{
BadRequest
}
})
}).getOrElse(Future.successful(BadRequest))
}
}
ここから先に進む方法はありますか?たぶん、これは間違ったアプローチです。ありがとう!