0

私は、ライアン・ベイツがFacebookで認証するために使用するFacebookRailscasthttp : //media.railscasts.com/assets/episodes/videos/360-facebook-authentication.ogvでの認証をフォローgem 'omniauth-facebook'しました。Railscastの最後に、彼はKoalaを紹介します。これにより、開いているグラフAPIを操作できます。ライアンは、宣誓トークンをパラメーターとしてこれに渡すように指示します

@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

これにより、オムニ認証情報がユーザーモデルのデータベースに保存されます。

  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のヘルパーメソッドを使用します

  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

しかし、私が以下を使用してデータをループしようとしたとき

Views / 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 に答える