我在示例项目中使用 ZenTask 中实现的安全解决方案的变体:
目标是结合withAuth
,Action(parse.json)
但我不知道如何。
我的安全特质
def withAuth(f: => Int => Request[AnyContent] => Result) = {
Security.Authenticated(userid, onUnauthorized) { userid =>
Action(request => f(userid.toInt)(request))
}
}
我想像往常一样使用内置的身体解析器:
def newReport() = Action(parse.json) { request =>
而不是在我的控制器中手动将正文解析为 json。
def newReport() = withAuth { userId =>
{ request =>
request.body.asJson match {
case Some(json) =>
json.validate[Report](Reports.readsWithoutUser).map {
case _: Report =>
Reports.newReport(_)
Ok("")
}.recoverTotal {
e =>
val errors = JsError.toFlatJson(e)
Logger.error(errors.toString)
BadRequest("Detected error:" + errors)
}
case None => BadRequest("Json object missing from request")
}
}