播放 2 中 AuthenticatedBuilder 的异步版本

Async version of AuthenticatedBuilder in play 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 。我如何编写这种身份验证的异步版本?

我正在使用 play 2.4。

AuthendicatedBuilder 是 child,共 ActionBuilder。所以我认为它的 async 方法也应该有效。

用法示例:

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