2012-02-10 12 views
4

私はUserクラスからユーザーIDを変換し、それをPlayに保存しようとしています!セッション変数。しかし、私はそのセッション変数を出力しようとすると、空の文字列を返します。これは簡単な認証です。認証中Scala longから文字列への変換が空白になる

:プレイ中

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

印刷セッション変数! Scalaのビュー:

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

そして、Userクラス:

case class User(
    val id: Long, 

ソリューション?user.idがセッションに格納されない原因となっている、または間違っているのは何ですか?ありがとう

+0

ここに投稿する前にすべてを確認しても、初期化エラーのようです:セッションを初期化しましたか?あなたはそれを使用する前にユーザーを初期化していますか? そうでなければ、 'Long'と' String'とで何が変わるのかわかりません。 –

+0

両方とも初期化されています。セッションに保存したユーザー名のような文字列にアクセスできます。私の唯一の他の推測は、私は遊びの "機能"が欠けていることです!セッション変数。 – crockpotveggies

+0

実際、私は現在、liftwebで同じ順序の問題を抱えていますが、 'SessionVar'では動作しますが、' RequestVar'では動作しません。 –

答えて

3

もう少し読んで、これは実際にプレイの "機能"によって引き起こされた! 1.2.4フレームワーク。幸いなことに、v2でさらに多くのことを期待できます。

私たちの特定のアプリでは、セッション変数については3番目の見落としがあります。アクセス可能にするには、それぞれ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として保存する必要があります。

次に、Play!私はこのようにvarにアクセスすることができます:@ctx("userid")

私はこれがPlayを使用している将来の人々に役立つことを願っています!

関連する問題