Scala Play 会话值不保存
Scala Play session value not saving
所以我正在使用 IntelliJ 14.1.1 在 Scala 中使用 Play 2.3 开发一个网络应用程序。
问题在于在会话中存储值。我目前有这个:
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
}
现在在上面的函数中,它只查找用户名并呈现帐户页面一次。之后的问题是,当我想从帐户页面导航到某个页面时,例如更改密码页面,甚至是刷新帐户页面,它都会重定向回使用新会话登录。
我做错了什么,有没有更好的方法来检查会话是否经过身份验证以访问页面,而不是在每个显示功能上重复代码。
好像是个简单的括号问题,试一下:
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)
}
您实际上在任何情况下都在您的控制器中重置会话,现在 withNewSession
调用在 getOrElse
内,它仅在没有 的情况下发送新会话用户名在当前找到。
所以我正在使用 IntelliJ 14.1.1 在 Scala 中使用 Play 2.3 开发一个网络应用程序。
问题在于在会话中存储值。我目前有这个:
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
}
现在在上面的函数中,它只查找用户名并呈现帐户页面一次。之后的问题是,当我想从帐户页面导航到某个页面时,例如更改密码页面,甚至是刷新帐户页面,它都会重定向回使用新会话登录。
我做错了什么,有没有更好的方法来检查会话是否经过身份验证以访问页面,而不是在每个显示功能上重复代码。
好像是个简单的括号问题,试一下:
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)
}
您实际上在任何情况下都在您的控制器中重置会话,现在 withNewSession
调用在 getOrElse
内,它仅在没有 的情况下发送新会话用户名在当前找到。