2

ユーザーがログインしているかどうかを確認する 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))
  }
}

ここから先に進む方法はありますか?たぶん、これは間違ったアプローチです。ありがとう!

4

1 に答える 1