我跟着 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 %>
它没有给我任何状态更新