私は、プレイフレームワークとアクション構成のドキュメントに従っています。私のアクションは現在のセッションをチェックして、もし存在すれば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はリクエストオブジェクトで定義されたメソッドではありません。リクエストオブジェクトのセッションを変更する方法はありますか?
ようになります私は、機能を必要としないことになったし、代わりにクッキーを使用していました。私は、すべてのリクエストでクッキーをチェックし、それが存在しない場合はそれを作成するフィルターを使用しました。私はまた、上記の方法を試したと信じて、それは動作しませんでした。セッションは変更されません。この質問を閉じるために、私は後でそれを打ち明けます。 – decapo
私が書いたように、さらにセッションを通過できる新しいSessionオブジェクトが作成されます。しかし、私の答えの大きな部分は、実際のユーザーセッションは変更されないと言います。だから私は、あなたが非常に奇妙で、おそらく間違っていることを見つけましたが、実際の質問を解決します。 – SeriousDron