【问题标题】:undefined method `get_access_token' while implementing koala gem in rails app在rails应用程序中实现koala gem时未定义的方法`get_access_token'
【发布时间】:2015-09-08 11:54:31
【问题描述】:

我想在 Rails 应用中实现 koala gem
但我收到一个错误“未定义的方法 get_access_token” 我的 facebook 控制器代码是

  class FacebookController < ApplicationController
  before_filter :authenticate_user!

  def index
  unless current_user.facebook_oauth_setting
      @oauth = Koala::Facebook::OAuth.new("app-id", "secret", "http://#{request.host}:#{request.port}/callback")
      session["oauth_obj"] = @oauth
      redirect_to @oauth.url_for_oauth_code
    else
      redirect_to "/facebook_profile"
    end
  end

  def callback
    unless current_user.facebook_oauth_setting

      @oauth = session["oauth_obj"]
      Rails.logger.info("**************#{@oauth}***************")
      Rails.logger.info("**********#{params[:code]}*************")

   FacebookOauthSetting.create({:access_token => @oauth.get_access_token(params[:code]), :user_id => current_user.id})  

      redirect_to "/facebook_profile"
    else
      redirect_to "/"
    end
  end

  def facebook_profile
    if current_user.facebook_oauth_setting
      @graph = Koala::Facebook::API.new(current_user.facebook_oauth_setting.access_token)
      @profile = @graph.get_object("me")
      @picture = @graph.get_picture("me")
      @feed = @graph.get_connections("me","feed")
      @friends = @graph.get_connections("me", "friends")
    else
      redirect_to "/"
    end
  end

end

我存储访问令牌的模型是

class TwitterOauthSetting < ActiveRecord::Base
  belongs_to :user

end

我迁移到存储 access_token 是

class CreateFacebookOauthSettings < ActiveRecord::Migration
  def change
    create_table :facebook_oauth_settings do |t|
      t.string :access_token
      t.integer :user_id
      t.timestamps null: false
    end
  end
end

【问题讨论】:

  • undefined method get_access_token 是为了什么?请发布完整的错误消息
  • #<0x007efff63efe98>

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems


【解决方案1】:

callback 方法中创建@oauth 对象,而不是从session 中获取它。这样做:

@oauth = Koala::Facebook::OAuth.new("app-id", "secret", "http://#{request.host}:#{request.port}/callback")    
FacebookOauthSetting.create(:access_token => @oauth.get_access_token(params[:code]), :user_id => current_user.id)

它应该可以解决你的问题。

【讨论】:

  • 如果你打印这个你会看到什么:puts #{@oauth.class.inspect} AND puts #{@oauth.inspect}
  • @oauth 对象的类型应该是Koala::Facebook::OAuth。确保是这种情况。
  • 通过这样做将#{@oauth.class.inspect} 我得到===========Hash=============通过这样做这使得 #{@oauth.inspect} ==========={"app_id"=>"app-id", "app_secret"=>"app_secret", "oauth_callback_url"=>"localhost:3000/callback "}==============
  • 这就是问题所在。根据文档,它必须是 Koala::Facebook::OAuth 类型。您可以拨打:@oauth.get_access_token...
  • 我使用了相同类型的@oauth 对象,你可以在索引方法中看到这个
【解决方案2】:

对象类型应该是Koala::Facebook

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多