Scala Play session 值不保存

标签 scala session playframework

所以我正在使用 IntelliJ 14.1.1 在 Scala 中使用 Play 2.3 开发一个网络应用程序。

问题在于在 session 中存储值。我目前有这个:

def authCredentials = Action { implicit request =>
  loginForm.bindFromRequest.fold(
        formWithErrors => BadRequest(views.html.login(formWithErrors.withError("badlogin","Username or password is incorrect."))),
        goodForm => Redirect(routes.AccountController.display).withSession(request.session + ("username" -> goodForm._1))
    )
}

然后在我的 AccountController 中:

  def display = Action { implicit request =>
    request.session.get("username").map { username =>
      Ok(views.html.account(User.getUser(username))).withSession(request.session + ("username" -> username))
    }.getOrElse(Redirect(routes.LoginController.login)).withNewSession
  }

现在在上面的函数中,它只查找用户名并渲染帐户页面一次。之后的问题是,当我想从帐户页面导航到某个页面时,例如更改密码页面,甚至是刷新帐户页面,它都会重定向回使用新 session 登录。

我做错了什么,有没有更好的方法来检查 session 是否经过身份验证以访问页面,而不是在每个显示功能上重复代码。

最佳答案

这似乎是一个简单的括号问题,试试:

def display = Action { implicit request =>
  request.session.get("username").map { username =>
  Ok(views.html.account(User.getUser(username))).withSession(request.session + ("username" -> username))
  }.getOrElse(Redirect(routes.LoginController.login).withNewSession)
}

您实际上在任何情况下都在您的 Controller 中重置了 session ,现在是 withNewSession电话在里面 getOrElse , 只有在当前 session 中找不到用户名 时才会发送新 session 。

关于Scala Play session 值不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29557709/

相关文章:

Scala:可选类型参数?

scala - 没有模拟的 Akka 单元测试策略

python - 使用 Scala 或 Python 列出存储在 Hadoop HDFS 上的 Spark 集群中可用的所有文件?

scala - 具有不同 bin 大小的 JFreeChart 直方图

django - 使用 Django session 存储登录用户

Azure B2C Net Core 开发工作流程

session - 如何使用 String 扩展 session.Value

scala - Play : Restart on code change takes long to shutdown and starting the Hikary Pool

java - Play 框架中的 RJS

java - 将 @PrePersist 和 @PreUpdate 与 Ebean 和 Play 2.5.x 一起使用不起作用?