2017-02-22 2 views
1

でAuthenticatedBuilderの非同期バージョン私はいくつかの他のアクションで基本認証を構成しようとしています:プレイ2

def findByNameSecure(username: String) = Authenticated { _ => 
    val cursor: Cursor[JsObject] = persons. 
     find(Json.obj("userdetails.username" -> username)). 
     cursor[JsObject](ReadPreference.primary) 
    val res = cursor.collect[List]().map { persons => 
     Ok(Json.toJson(persons)) 
    } .recover { 
     case _ => BadRequest(Json.parse("{'error': 'failed to read from db'}")) 
    } 
    Await.result(res, 10.seconds) 
    } 

ルート:

GET  /secure/user/findbyname  controllers.UserController.findByNameSecure(username: String) 

予想通り、この作品。妨げているのは、私がブロックしているAwait.resultを使用したことです。この種の認証の非同期バージョンを作成するにはどうすればよいですか?

私は演劇2.4を使用しています。

+0

なぜあなたは、誰もがコンパイルし、多分実行することができますあなたのコードの簡単な例を書きませんか? あなたは試してみましたか?def findByNameSecure(username:String)= Authenticated.async {_ => ' – EnverOsmanov

+0

申し訳ありませんが、私はプロジェクト全体を公開する自由がありません。 'Authenticated.async'はうまく動作します。ありがとう!あなたが答えとして書くことができれば、それをうれしく受け入れます。 – qed

+0

ビジネスロジックが疑問に繋がっていないので、削除するだけです。例:https://scastie.scala-lang.org/3821 シンプルなので、多くのヘルプを書くことができます。 – EnverOsmanov

答えて

3

AuthendicatedBuilderは、ActionBuilderの子です。だから、そのasyncメソッドもうまくいくはずです。使い方の

例:

def findByNameSecure(username: String) = Authenticated.async { _ =>