我在我的游戏中使用一些客户帐户功能,application.If u注册为游戏用户,然后devise 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
如果我尝试session:current_account_account = account
它不工作,因为重定向后,它再次要求登录。因为我使用的是“authenticate_account!”在每个类中进行过滤。
基本上我想要的是将我创建的account对象加载到会话中,就像它是一个注册用户一样。
提前感谢您的帮助。
发布于 2012-11-16 15:00:53
我认为我们需要你的authenticate_account!过滤器的代码来正确地回答这个问题,但是对于你的错误,这是因为你试图在你的会话中放入整个对象,最好只放入对象的id:
session[:current_account] = game_user.id更新
对于devise,您应该使用sign_in方法为该用户设置会话,而不是手动设置会话变量,这取决于您使用devise的方式:
sign_in account或sign_in game_user
发布于 2012-11-16 15:02:45
Rails cookies的最大限制是4k ( http://guides.rubyonrails.org/security.html#session-storage )。执行此操作的首选方法是仅保存id,如下面的obj session[:current_account_id] = game_user.id,并在需要时查找它。这要高效得多,即使你的整个对象都能以某种方式装入内存。
https://stackoverflow.com/questions/13411658
复制相似问题