我跟着Ryan Bates用Facebook Railscast http://media.railscasts.com/assets/episodes/videos/360-facebook-authentication.ogv进行身份验证,然后使用gem 'omniauth-facebook'
对Facebook进行身份验证。在Railscast结束时,他介绍了Koala,它允许您与开放图形API进行交互。 Ryan给出了将誓言令牌作为参数传递给此
@graph = Koala::Facebook::API.new(your_oauth_token)
我无法让这个工作,因为我不知道从哪里获得誓言令牌。让我解释一下......
在sessions_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
问题 我如何获得誓言令牌(从会话或数据库)到主控制器的索引方法?
例如,使用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
但是,当我尝试使用以下
循环数据时查看/主/ 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 %>
它没有给我任何状态更新
答案 0 :(得分:0)
错误是current_user返回nil。这可能是因为未设置会话[: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