我遵循播放框架和動作組合的文檔。我的動作會檢查當前會話以查看用戶是否存在,如果有的話返回UserRequest,如果不是,我想創建一個訪客用戶,將它們存儲在請求的會話中並返回帶有更新會話的UserRequest。Play Framework如何更新請求中的會話
class UserRequest[A](val email: String, request: Request[A]) extends WrappedRequest[A](request)
class UserAction @Inject()(val parser: BodyParsers.Default, dbConfigProvider: DatabaseConfigProvider)(implicit val executionContext: ExecutionContext)
extends ActionBuilder[UserRequest, AnyContent] with ActionTransformer[Request, UserRequest] {
val userRepo = new UserRepository(dbConfigProvider)(executionContext)
def transform[A](request: Request[A]) = {
request.session.get("user") match {
case None => createGuestUser(SecureRandomUtil.generateSecureRandom(24)).map { u =>
new UserRequest(u.email, request.withSession("user"->u.email))
}
case Some(email) => Future.successful(new UserRequest(email, request))
}
}
但是withSession不是請求對象的定義方法。有沒有辦法修改請求對象上的會話?
我結束了不需要的功能和使用cookie而不是。我確實使用了一個過濾器來檢查每個請求上的cookie,然後創建它,如果它不存在。我也相信我嘗試了上面的方法,但沒有奏效。會議不會改變。爲了解決這個問題,我稍後會給出一個答案。 – decapo
正如我寫的,它會創建新的會話對象,您可以進一步傳遞。但是,我的答案很大一部分說它不會改變實際的用戶會話。所以我發現你想做的事很奇怪,可能是錯誤的,但是,它解決了你的實際問題。 – SeriousDron