0

我跟着 Ryan Bates 使用 Facebook Railscast进行身份验证http://media.railscasts.com/assets/episodes/videos/360-facebook-authentication.ogv在其中他使用gem 'omniauth-facebook'Facebook 进行身份验证。在 Railscast 的最后,他介绍了 Koala,它允许您与开放图形 api 进行交互。Ryan 给出了将 oath 令牌作为参数传递给这个的指令

@graph = Koala::Facebook::API.new(your_oauth_token)

我无法让它工作,因为我不确定从哪里获得誓言令牌。让我解释....

在 session_controller.rb 中,我们有这个

 def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id

    redirect_to root_url

  end

它将omniauth信息保存到用户模型中的数据库中

  def self.from_omniauth(auth)
  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
    user.provider = auth.provider
    user.uid = auth.uid
    user.name = auth.info.name
    user.oauth_token = auth.credentials.token
    user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    user.save!
  end

所以我猜我需要user.oath_token传入

@graph = Koala::Facebook::API.new(your_oauth_token)

但我无法让它工作。

你能想象我有一个主控制器和一个索引操作吗?

Main_controller.rb
   def index
       @graph = Koala::Facebook::API.new(how do I get the oauth token in here?)
   end

问题 我如何将 oath 令牌(来自会话或数据库)获取到主控制器的 index 方法中?

例如,使用 application_controller.rb 中的 helper 方法

  def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]

   end
  helper_method :current_user

我试图在 main_controller.rb 中做到这一点

  def index
    @graph = Koala::Facebook::API.new(current_user.oauth_token)
    @graph_data = @graph.get_object("/me/statuses", "fields"=>"message")

    end

但是,当我尝试使用以下方法遍历数据时

视图/main/index.html.erb

<% if current_user %>

Looping through your statuses:<br />
<ul>

<% @graph_data.each do |status| %>
<%= status["message"] %> (<i><%=status["updated_time"]%></i>)<hr>
<% end %>
</ul>

  <% end %>

它没有给我任何状态更新

4

1 回答 1

0

错误是 current_user 返回 nil。这可能是因为 session[:user_id] 未设置(即用户未登录)。您应该有一个签入索引来防止这种情况:

def index
  if current_user
    @graph = Koala::Facebook::API.new(current_user.oauth_token)
  else
    # User isn't logged in; do something else
  end
end
于 2012-09-14T20:07:19.350 回答