0

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

在玩弄它之后,我不明白会话/cookies 是如何工作的。例如,查看以下代码:

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 应用程序中没有会话控制器。

谢谢,

4

1 回答 1

0

我在身份验证方法中设置:

  session[:current_user] = user.id

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

<%= "logged in as #{User.find(session[:current_user]).name}" %>
于 2012-05-21T20:31:29.573 回答