我正在尝试从 User 类转换用户 ID 并将其存储在 Play 中! session 变量。但是,当我尝试打印该 session 变量时,它返回一个空白字符串。这是一个简单的身份验证。
身份验证期间:
session += "userid" -> user.id.toString
在 Play 中打印 session 变量!斯卡拉 View :
@ctx("userid")
整个认证定义:
def authenticate(login:LoginAttempt) = {
println("in authenticate")
User.authenticate(login.username, login.password) match {
case Some(user:User) => {
session += "username" -> user.emailAddress
session += "userid" -> user.id.toString
session += "name" -> user.name
session += "accounts" -> user.accounts.toString
Redirect(session("path").getOrElse("/"))
}
case _ => {
flash += "error" -> "Wrong username or password."
Action(Authentication.login)
}
}
}
和用户类:
case class User(
val id: Long,
一个办法? 这里缺少什么或出了什么问题阻止了
user.id
从存储在 session 中?谢谢
最佳答案
四处打听,又多看了几遍,这确实是该剧的一个“特点”造成的! 1.2.4 框架。幸运的是,我们可以对 v2 期待更多。
对于我们的特定应用程序,在 session 变量方面有第三个经常被忽视的步骤。您需要renderArgs
每个人都可以访问。所以@ChrisJamesC 的评论大部分是正确的:初始化中缺少一个步骤。
这是我们 Secure.scala Controller 中发生的事情:
(session("userid"), session("username"), session("name"), session("accounts")) match {
case (Some(userid), Some(username), Some(name), Some(accounts)) => {
renderArgs += "userid" -> userid
renderArgs += "username" -> username
renderArgs += "name" -> name
renderArgs += "accounts" -> accounts
Continue
}
case _ => {
session += "path" -> Request.current().path
Action(Authentication.login)
}
}
在我自己的情况下,我没有意识到我需要为我想在 session 中存储和访问的每个变量渲染参数。但是有一个问题:您仍然需要将每个 var 存储为一个字符串。
然后在每场比赛中! View 我可以像这样访问 var:
@ctx("userid")
我希望这对 future 使用 Play 的人有所帮助!
关于scala - Scala long 到字符串的转换打印空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223213/