2012-02-10 153 views
4

我想從用戶類轉換用戶ID並將其存儲在播放!會話變量。但是,當我嘗試打印出該會話變量時,它將返回一個空白字符串。這是一個簡單的認證。斯卡拉長轉換爲字符串打印空白

在認證過程:在播放

session += "userid" -> user.id.toString 

打印會話變量!階視圖:

@ctx("userid") 

整個認證DEF:

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被存儲在會話中?謝謝

+0

即使我確定在發佈之前確認了所有內容,但它似乎是一個初始化錯誤:您初始化了會話嗎?你使用它之前初始化用戶ID? 否則我不會看到什麼會改變一個'長'與'字符串' – 2012-02-10 17:07:48

+0

正確的兩個都已初始化,我可以驗證bc我有權訪問字符串,如我在會話中存儲的用戶名。我唯一的猜測是我錯過了遊戲的「特色」!會話變量。 – crockpotveggies 2012-02-10 18:01:03

+0

事實上,我現在有一個與liftweb相同的問題,但是,它與'SessionVar'一起使用,但不與'RequestVar'一起使用。 – 2012-02-10 18:03:48

回答

3

在問及周圍並做了更多的閱讀之後,這確實是由Play的「特性」造成的! 1.2.4框架。幸運的是,我們可以期待v2更多。

對於我們特定的應用程序,當涉及到會話變量時,有第三個經常被忽視的步驟。您需要爲每個人提供renderArgs才能訪問。所以@ChrisJamesC的評論大多是正確的:在初始化中缺少一個步驟。

這裏是發生了什麼事在我們Secure.scala控制器:

(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) 
      } 
     } 

就我自己來說,我沒有意識到我需要renderArgs爲可變我要存儲和訪問的會話。但有一個問題:你仍然需要將每個var存儲爲一個String。

然後在每次玩!查看我可以像這樣訪問var:@ctx("userid")

我希望這有助於未來使用Play的人!

相關問題