0

私のゲーム アプリケーションでいくつかのゲスト アカウント機能に取り組んでいます。ゲーム ユーザーとして登録すると、gem が現在のアカウント ID をセッションに自動的にロードします。しかし、ユーザーがゲストの場合、ハードコードされた値を持つアカウントとユーザー タイプ オブジェクトを作成し、それをデータベースに正常に保存しています。しかし、オブジェクトをセッションに保存しようとすると、正しく機能しません。

私のコードはこのようなものです、

def play_as_guest
   account = Account.new(email: "guest_#{Time.now.to_i}#{rand(99)}@eossys.com", password: "password", is_guest: true)
   account.save
   game_user = GameUser.new(account: account, game_profile_attributes: {first_name: "Guest", last_name: "guest", nick_name: "guest"})
   game_user.save
   session[:current_account] = game_user
   redirect_to "/game_profiles/#{account.id}/summary"
end

アカウント obj session[:current_account] = game_user を保存する場合

これは、「ActionDispatch::Cookies::CookieOverflow in HomeController#play_as_guest」のエラーをスローしています。

session[:current_account_account] = account を試すと

リダイレクトした後、再度ログインを要求するため、機能していません。「authenticate_account!」を使用しているためです。すべてのクラスでフィルタリングします。

私が基本的に望んでいるのは、作成したアカウント オブジェクトを、登録済みユーザーのようにセッションにロードすることです。

事前に助けてくれてありがとう。

4

2 に答える 2

0

適切に応答するにはフィルターのコードが必要だと思いauthenticate_account!ますが、エラーの場合、これはオブジェクト全体をセッションに入れようとしたためです。オブジェクトの のみを入れたほうがよいですid:

session[:current_account] = game_user.id

アップデート

デバイスを使用するsign_in方法に応じて、セッション変数を手動で設定する代わりに、このユーザーのセッションを設定するメソッドを使用する必要があります。

sign_in accountまたsign_in game_user

于 2012-11-16T07:00:52.943 に答える
0

Rails Cookie の上限は 4k です ( http://guides.rubyonrails.org/security.html#session-storage )。のようなobj session[:current_account] = game_userことをすると、そこに game_user オブジェクト全体を詰め込もうとしているため、ActionDispatch::Cookies::CookieOverflow言及したエラーで部屋が不足します。これを行うための推奨される方法は、このように id のみを保存し、obj session[:current_account_id] = game_user.id必要なときに検索することです。オブジェクト全体が何らかの形でメモリに収まったとしても、これははるかに効率的です。

于 2012-11-16T07:02:44.780 に答える