1

Play Framework で新しいセッションを作成しようとしていますが、うまくいきません。

OpenID の結果を取得したら、返されたばかりの OpenID 情報とともに、それらをインデックスにリダイレクトしたいと考えています (とりあえず今のところはともかく)。

Redirect(routes.Application.index).withSession(
            "id" -> info.id,
            "email" -> info.attributes.get("email").getOrElse("unknown@unknown.com"),
            "timestamp" -> (System.currentTimeMillis() / 1000L).toString)

これにより、次の関数が呼び出されます。

def index = Action { implicit request ⇒
    Ok(html.index(request))
  }

ただし、Eclipse によると、暗黙の要求には null の Cookie と null のセッションがあります。何が起きてる?

それが役立つ場合、これは OpenID 情報が由来する完全な関数です。

def openIDCallback = Action { implicit request ⇒
    AsyncResult(
      OpenID.verifiedId.extend(_.value match {
        case Redeemed(info) ⇒ {
          Redirect(routes.Application.index).withSession(
            "id" -> info.id,
            "email" -> info.attributes.get("email").getOrElse("unknown@unknown.com"),
            "timestamp" -> (System.currentTimeMillis() / 1000L).toString)
        }
        case Thrown(t) ⇒ {
          // Here you should look at the error, and give feedback to the user
          Redirect(routes.Application.index)
        }
      }))
  }
4

1 に答える 1

1

そのため、明らかに Eclipse デバッガーは、特定の値が遅延していることを認識していません。null だと言っているだけです。つまり、Sessionは、呼び出された直後ではないにもかかわらず、nullに見えます。

本当の問題は、セッションを使用するはずだったコードの部分で、request.session.get() の代わりに request.cookies.get() を使用していたことです。セッションは Cookie ですが、独自の特別な val を持つ名前付き Cookie です。したがって、私のコードは別の場所で別の理由で壊れていました。

于 2012-06-03T03:48:37.740 に答える