2

我在设计中使用 mongoid、rails 3.2.10 和omniauth .. 并尝试设置facebook 个人资料图片网址的自定义image_size

 config.omniauth :facebook , API_KEYS['facebook']['api_key'], API_KEYS['facebook']['api_secret'], :image_size => {:width => 100, :height => 100}

我配置如上..但结果如下..

http://graph.facebook.com/636937446/picture?type=#<OmniAuth::Strategy::Options height=100 width=100>

所以我检查了 facebook-omniauth Strategy.rb 文件。请告诉我该怎么办..

  def image_url uid, options
    uri_class = options[:secure_image_url] ? URI::HTTPS : URI::HTTP
    url = uri_class.build({:host => 'graph.facebook.com', :path => "/#{uid}/picture"})

    query = if options[:image_size].is_a?(String)
      { :type => options[:image_size] }
    elsif options[:image_size].is_a?(Hash)
      options[:image_size]
    end
    url.query = Rack::Utils.build_query(query) if query

    url.to_s
  end
4

1 回答 1

1

嗨,我有同样的问题。我实际上编辑了我的strategy.rb文件,添加了我的自定义函数,并且效果很好。

第 39 行:将其更改为'image' => image_url(uid,options),

接下来将 image_url 方法编辑成这样

  def image_url uid, options
    query = if options[:image_size].is_a?(String)
      { :type => options[:image_size] }
    elsif options[:image_size].is_a?(Hash)
      options[:image_size]
    end
    url = build_url("https://graph.facebook.com/","#{uid}/picture",query) if query

    url.to_s
  end

在这里,我调用了另一种方法,称为"build url". 所以就在 image_url 方法定义之后"build url"

  def build_url(domain,path,params)
      return domain + "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&')) if not params.nil?
  end

保存文件,就是这样!!希望这对你有用!!!

于 2013-04-11T09:34:41.217 回答