播放 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 { _ =>
我正在尝试将基本身份验证与其他一些操作组合起来:
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 { _ =>