gpt4 book ai didi

Scala 和 Play 框架 2.2.0、Action.async 和 isAuthenticated

转载 作者:行者123 更新时间:2023-12-04 07:54:34 24 4
gpt4 key购买 nike

我有一个使用 zentasks 示例中描述的 isAuthenticated 模式的应用程序。
它还使用 Future/Async 来最大程度地减少阻塞......

  def index = isAuthenticated { username => implicit request =>        
val promise =
Future {
Foo.all()
}
Async {
promise.map(f => Ok(views.html.foo.index(username, f)))
}
}

这在 Play 2.2.0 中继续有效,但不推荐使用 Future/Async 模式。我们应该使用 Action.async;就像是:
  def asyncTest = Action.async {
val fut = Future {
// Artificial delay to test.
Thread.sleep(5000)
"McFly"
}
fut.map (f => Ok(f))
}

我的问题是;我将如何将 Action.async 与上述身份验证方法或类似方法一起使用?

最佳答案

一种选择是使用 Action Composition通过定义 IsAuthenticated像这样:

def username(request: RequestHeader) = request.session.get("email")

def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Application.login)

def IsAuthenticated(f: => String => Request[AnyContent] => Future[SimpleResult]) = {
Action.async { request =>
username(request).map { login =>
f(login)(request)
}.getOrElse(Future.successful(onUnauthorized(request)))
}
}

然后你可以通过以下方式使用它:
def index = IsAuthenticated { user => implicit request =>
val fut = Future {
// Artificial delay to test.
Thread.sleep(5000)
"McFly"
}
fut.map (f => Ok(f))
}

关于Scala 和 Play 框架 2.2.0、Action.async 和 isAuthenticated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936669/

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