Web会话如何在此rails项目中工作?

时间:2012-05-21 20:08:32

标签: ruby-on-rails facebook facebook-graph-api fb-graph

介绍: 我正在建立一个Facebook应用程序,汽车祝生日快乐。我在Rails中构建它并使用名为fb_graph的ruby API包装器。 fb_graph的创建者慷慨地提供了一个工作示例应用程序fb_graph_sample

在玩完它之后,我不明白会话/ cookie是如何工作的。例如,看看这段代码:

def require_authentication
  authenticate Facebook.find_by_id(session[:current_user])
rescue Unauthorized => e
  redirect_to root_url and return false
end

def authenticate(user)
  raise Unauthorized unless user
  session[:current_user] = user.id
end

session [:current_user]来自哪里?

在config / initializers / session_store.rb下,

FbGraphSample::Application.config.session_store :cookie_store, :key => '_fb_graph_sample_session'

所以,我查看localhost的cookie,我正在使用Chrome检查器工具部署它,我看到_fb_graph_sample_session包含值,域,路径,到期,大小,http等...

我仍然没有看到session [:current_user]是如何产生的?查看development.sqlite3文件,facebook模型只有1个数据。 id为1,这使我相信[:current_user]为1,代码调用'authenticate Facebook.find_by_id(1)'

有人可以解释session [:current_user]如何转换为1?我阅读了railstutorial.org关于登录注册的章节,它创建了一个会话控制器,但fb_graph_sample应用程序中没有会话控制器。

谢谢,

1 个答案:

答案 0 :(得分:0)

我在验证方法中设置了:

  session[:current_user] = user.id

当用户登录cookie(将其视为特殊哈希)写入浏览器时,应用程序正在使用基于cookie的会话存储。您几乎可以使用会话作为哈希,您可以如上所示进行设置,或者获取,即

<%= "logged in as #{User.find(session[:current_user]).name}" %>