gpt4 book ai didi

scala - 如何在 Play 中结合正文解析器和安全性

转载 作者:行者123 更新时间:2023-12-04 17:53:28 25 4
gpt4 key购买 nike

我在示例项目中使用了在 ZenTask 中实现的安全解决方案的变体:

目标是结合 withAuthAction(parse.json) 但我不知道怎么做。

我的安全特质

def withAuth(f: => Int => Request[AnyContent] => Result) = {
Security.Authenticated(userid, onUnauthorized) { userid =>
Action(request => f(userid.toInt)(request))
}
}

我想像往常一样使用内置在 body 解析器中的游戏:

def newReport() = Action(parse.json) { request =>

而不是在我的 Controller 中手动将正文解析为 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")
}
}

最佳答案

那么您应该简单地使用带有主体解析器的重载 Action (apply[A](bodyParser: BodyParser[A])(block: Request[A] => Result))。

def withAuth[A](p: BodyParser[A])(f: => Int => Request[A] => Result): Action[(Action[A], A)] = {
Security.Authenticated(userid, onUnauthorized) { userid =>
Action(p)(request => f(userid.toInt)(request))
}
}

// Convenience for when you don't need a BP
def withAuth(f: => Int => Request[AnyContent] => Result): Action[(Action[AnyContent], AnyContent)] = {
withAuth(BodyParsers.parse.anyContent)(f)
}

关于scala - 如何在 Play 中结合正文解析器和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14688485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com