我正在尝试在Play框架中创建一个新会话,但它似乎并不坚持。
获得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)
}
}))
}
答案 0 :(得分:1)
显然Eclipse调试器没有意识到某些值是懒惰的。它只是说它们是空的。意思是,Session 看起来 null,即使它没有被调用。
真正的问题是,在应该使用Session的代码部分中,我使用的是request.cookies.get()而不是request.session.get()。尽管会话是一个cookie,但它是一个带有自己的特殊val的命名cookie。因此,我的代码在不同的地方打破了,原因不同。