相关疑难解决方法(0)

Facebook Omniauth + Carrierwave个人资料图片

我有一个用户Devise + Omniauth允许用户通过Facebook注册的应用程序.我还使用Carrierwave允许用户上传他们自己的个人资料图像并处理从Facebook请求的图像.因此,我在控制器和用户模型中具有以下功能:

user.rb

def self.find_for_facebook_oauth( data, signed_in_resource=nil)
user = User.where(:email => data.info.email).first
unless user
  params =
    {  
      :user =>
      {
        :username => data.uid,
        :email => data.info.email,
        :password => Devise.friendly_token[0,20],
        :user_profile_attributes => 
          {
            :first_name => data.info.first_name,
            :last_name => data.info.last_name,
            :remote_image_url => data.info.image
          },
        :user_auths_attributes =>
        [{
          :uid => data.uid,
          :provider => data.provider
        }]
      }
    }
    user = User.create!(params[:user])
end
return user
end
Run Code Online (Sandbox Code Playgroud)

omniauth_callbacks_controller.rb

def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = …
Run Code Online (Sandbox Code Playgroud)

facebook ruby-on-rails omniauth carrierwave

7
推荐指数
2
解决办法
4013
查看次数

重定向禁止/坏uri(脸谱)回形针图像

我正在尝试将用户的facebook url保存到我的数据库中,但是我收到以下错误.

redirection forbidden: http://graph.facebook.com/1240771104/picture -> https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t...
Run Code Online (Sandbox Code Playgroud)

我已经引用了这个问题,但我认为他只是调用一个图像而不是将其保存到带有创建块的数据库中.

这是我的用户模型......

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
Run Code Online (Sandbox Code Playgroud)

我在'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
Run Code Online (Sandbox Code Playgroud)

我需要添加吗?

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

到创建块? 这个:

        if auth.info.image.present? …
Run Code Online (Sandbox Code Playgroud)

ruby paperclip ruby-on-rails-4

1
推荐指数
1
解决办法
2635
查看次数