ruby - 重定向禁止/错误 uri (facebook) 回形针图像

标签 ruby ruby-on-rails-4 paperclip

我试图将用户的 facebook url 保存到我的数据库中,但出现以下错误。

redirection forbidden: http://graph.facebook.com/1240771104/picture -> https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t...

我引用了 this问题,但我认为他只是调用图像而不是使用创建 block 将其保存到数据库。

这是我的用户模型...

def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
    user = User.where(:provider => auth.provider, :uid => auth.uid).first
    if user
      return user
    else
      registered_user = User.where(:email => auth.info.email).first
      if registered_user
        return registered_user
      else
        user = User.create( 
                            name:auth.extra.raw_info.name,
                            provider:auth.provider,
                            uid:auth.uid,
                            email:auth.info.email,
                            image:auth.info.image,
                            password:Devise.friendly_token[0,20],
                          )
      end    
    end
end

我在“def.self_for_facebook”下面添加了一个 URI 助手,因为我认为我只需要将 http 转换为 https。所以我从另一个堆栈问题中收集。

private

def process_uri(uri)
  require 'open-uri'
  require 'open_uri_redirections'
  open(uri, :allow_redirections => :safe) do |r|
  r.base_uri.to_s
  end
end

是否需要添加

if auth.info.image.present?
  image_url = process_uri(auth.info.image)
  user.update_attribute(:image, URI.parse(avatar_url))
end

创建 block ? 这个:

        if auth.info.image.present?
            uri = URI.parse(auth.info.image)
            uri.scheme = 'https'
            user.update_attribute(:image, URI.parse(uri))
        end

        user = User.create( 
                            name:auth.extra.raw_info.name,
                            provider:auth.provider,
                            uid:auth.uid,
                            email:auth.info.email,
                            password:Devise.friendly_token[0,20],
                          )

      end    

让我...

bad URI(is not URI?): https://graph.facebook.com/1240771104/picture

但这又是怎么回事。链接让我得到了图片!哇伙计!我一定离得很近。

最佳答案

在你的用户模型中

#user.rb
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
    user = User.create( image:process_uri(auth.info.image))
end

private

def self.process_uri(uri)
  require 'open-uri'
  require 'open_uri_redirections'
  open(uri, :allow_redirections => :safe) do |r|
    r.base_uri.to_s
  end
end

或者,如果您不想使用open uri redirections gem,则将process_uri 方法更改为

def self.process_uri(uri)
   avatar_url = URI.parse(uri)
   avatar_url.scheme = 'https'
   avatar_url.to_s
end

关于ruby - 重定向禁止/错误 uri (facebook) 回形针图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071386/

相关文章:

ruby - 解析来自 API 的字符串

ruby - Ruby 中的这种拓扑排序有缺陷吗?

ruby-on-rails - 从我的 Ruby on Rails Gem 渲染 View

ruby-on-rails - Rails 生成以前未使用过的唯一订单号

ruby-on-rails - 使用开放URI和回形针存储图像,且其大小小于10kb

ruby-on-rails - 在 Ruby on Rails 中使用回形针和 ffmpeg 转换视频

android - Ruby 对 Android 开发实用吗?

css - 为什么我的 TypeKit 字体没有显示?

ruby-on-rails - Rails/paperclip 的新手 - Paperclip 不会保存

sql - 同一天创建的记录数