2016-07-01 12 views
0

私はPlayFramework/Scalaを使用してアプリケーションを構築しています。カスタムBodyParserを非クラスに追加するアクション

私のセキュリティ層のために、私は、メインページのために正常に動作してAuth0を使用しています、と私はすでにプロファイル情報を取得することができる午前/新しいユーザーを追加するなど

今私はAPIを持っていると私はしたいです人々は私が私のAPIコントローラ上でこのカスタムアクションを追加しましたので、彼らも同様に接続している場合にのみ、それを使用できるように:私は私のreadアクションのためにそれを使用することができる午前

def AuthenticatedAction(f: Request[AnyContent] => Future[Result]): Action[AnyContent] = { 
    Action.async { implicit request => 

     (request.session.get("idToken").flatMap { idToken => 
     cache.get[JsValue](idToken + "profile") 
     } map { profile => 
     f(request) // IF USER CONNECTED THEN ADD PROFILE TO REQUEST AND PROCEED 
     }).orElse { 
     Some(Future(Redirect("/login"))) // OTHERWISE REDIRECT TO LOGIN PAGE 
     }.get 
    } 
    } 

(IDにより、1つのレコードのみを返します) :

def read(entityName: String, id: String) = AuthenticatedAction { 
    // SOME NOT RELEVANT CODE  
} 

私は、オブジェクトを作成するためにJSONを送信しようとすると、私の問題が来る:

私はカスタム認証されたアクションを追加しようとした前にこれが働いて私のコードだった:

def store(entityName: String, id: String) = Action.async(parse.json) { 
     // SOME NOT RELEVANT CODE 
} 

今、私は期待していました

:ここ

def store(entityName: String, id: String) = AuthenticatedAction(parse.json) { 
    // SOME NOT RELEVANT CODE 
} 

を使用することは、コンパイル・エラーです210

type mismatch; found : play.api.mvc.BodyParser[play.api.libs.json.JsValue] 
    required: play.api.mvc.Request[play.api.mvc.AnyContent] ⇒ scala.concurrent.Future[play.api.mvc.Result] 

そして、私はそれが私がカスタムボディパーサーを渡してサポートしていないという事実から来ている知っているが、私は同様のドキュメントから ActionBuilder を使用してに見ているが、私はAuth0によって提供されたコードを使用しようとしています。

カスタムアクションがクラスとして定義されていない場合、カスタムパーサーを処理する方法はありますか?

答えて

関連する問題