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,隐式请求具有空 cookie 和空会话。这里发生了什么?

如果有帮助,这是 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 调试器没有意识到某些值是惰性的。它只是说它们是空的。意思是, Session看起来为空,即使它不是一被调用。

真正的问题是,在应该使用 Session 的部分代码中,我使用的是 request.cookies.get() 而不是 request.session.get()。尽管会话是一个 cookie,但它是一个具有自己的特殊 val 的命名 cookie。因此,我的代码因不同的原因而在不同的位置中断。

于 2012-06-03T03:48:37.740 回答