gpt4 book ai didi

Scala Play 框架 2.2 - 如何在模板中获取有关用户登录状态的信息

转载 作者:行者123 更新时间:2023-12-01 06:31:38 25 4
gpt4 key购买 nike

我有以下用例。我在我的播放应用程序中实现了一个非常简单的身份验证,如果用户登录,它会添加一个 session cookie(见下面的代码)。

到目前为止,这段代码工作正常。我现在想要实现的是检查我的主模板是否有用户登录并根据用户状态在页面上显示登录/注销元素。

我怎样才能以最优雅的方式实现这一目标?

我找到了人们直接从模板访问 session 变量的来源,play <= 2.1。似乎这种方法不再适用于 2.2 并且已被弃用?
我是否必须在每个操作中向模板传递一个 bool 值来定义用户是否已登录?

包装 Action

case class Authenticated[A](action: Action[A]) extends Action[A] {

def apply(request: Request[A]): Future[SimpleResult] = {
if (request.session.get("user").getOrElse("").equals("user")) {
action(request)
} else {
Future.successful(Redirect("/login").withSession(("returnUrl", request.path)))
}
}

lazy val parser = action.parser
}

提交部分登录 Controller
def submit = Action { implicit request =>
loginForm.bindFromRequest.fold(
errors => Ok(html.login.form(errors)),
requestUser => {
val user: String = Play.current.configuration.getString("fillable.user").getOrElse("")
val password: String = Play.current.configuration.getString("fillable.password").getOrElse("")
if (requestUser.name.equals(user) && requestUser.pw.equals(password))
Redirect(request.session.get("returnUrl").getOrElse("/")).withSession(session + ("user" -> requestUser.name) - "returnUrl")
else
Ok(html.login.form(loginForm, "error", Messages("error.wrongCredentials")))
})
}

需要身份验证的示例 Controller 操作
def submit = Authenticated {
Action.async { implicit request =>
...
}
}

最佳答案

所以我现在发现,如果 Controller Action 使用隐式请求(就像我上面问题中的那个),我可以使用该请求,因此如果我将它添加到模板的头部,我可以使用我的模板中的 session :
(implicit request: Request[Any])
我不确定这是否是一个好方法,所以如果有人可以批准,我很高兴。

关于Scala Play 框架 2.2 - 如何在模板中获取有关用户登录状态的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19662443/

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