gpt4 book ai didi

scala - Play/Scala : use Redirect in ActionBuilder

转载 作者:行者123 更新时间:2023-12-02 15:32:16 25 4
gpt4 key购买 nike

我正在尝试构建一个简单的操作以在 Play Controller 中使用来检查 session 是否处于事件状态:

import play.api.mvc._
import scala.concurrent._

object AuthAction extends ActionBuilder[Request] {

def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = {
if (request.session.isEmpty) {
//Need to redirect to login page
Redirect("/login")
} else {
//Session is found, continue Action as normal
block(request)
}
}

}

问题是,它无法识别重定向。我如何让它在这个范围内工作?我想在需要授权的 Controller 中使用此操作:

object Application extends Controller {

def index = AuthAction {
Ok(views.html.index("You are logged in."))
}

}

这两个文件是不同的。

附带问题:invokeBlock[A]Request[A] 中的“A”到底是什么?

我使用的是 Play 2.2.1、Scala 2.10.3、Java 1.8 64 位

更新:尝试过这个,它不再给出任何错误,但它不起作用 - 重定向似乎被忽略。

import play.api.mvc._
import scala.concurrent._
import play.api.mvc.Results._

object AuthAction extends ActionBuilder[Request] {

def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[SimpleResult]) = {
if (request.session.isEmpty) {
Redirect("/login")
}
block(request)
}

}

最佳答案

您需要包含import play.api.mvc.Results._

来自官方docs ,

A type 是请求主体的类型。我们可以使用任何 Scala 类型作为请求主体,例如 String, NodeSeq, Array[Byte], JsonValue, or java.io.File ,只要我们有一个能够处理它的主体解析器。

总而言之,Action[A]使用 BodyParser[A]检索 A 类型的值来自 HTTP 请求,并构建 Request[A]传递给操作代码的对象。

关于scala - Play/Scala : use Redirect in ActionBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19879545/

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