首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails - ApplicationController

Ruby on Rails - ApplicationController
EN

Stack Overflow用户
提问于 2012-11-16 14:37:20
回答 2查看 388关注 0票数 0

我在我的游戏中使用一些客户帐户功能,application.If u注册为游戏用户,然后devise gem自动将当前帐户id加载到会话中。但是当用户是来宾时,我创建了一个帐户和一个用户类型对象,并成功地将其保存到数据库中。但是当我尝试将对象存储到会话中时,它不能正常工作。

我的代码是这样的:

代码语言:javascript
复制
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对象加载到会话中,就像它是一个注册用户一样。

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

发布于 2012-11-16 15:00:53

我认为我们需要你的authenticate_account!过滤器的代码来正确地回答这个问题,但是对于你的错误,这是因为你试图在你的会话中放入整个对象,最好只放入对象的id

代码语言:javascript
复制
session[:current_account] = game_user.id

更新

对于devise,您应该使用sign_in方法为该用户设置会话,而不是手动设置会话变量,这取决于您使用devise的方式:

sign_in accountsign_in game_user

票数 0
EN

Stack Overflow用户

发布于 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,并在需要时查找它。这要高效得多,即使你的整个对象都能以某种方式装入内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13411658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档