Rails: извлечение изображения из Facebook после входа в Omniauth с помощью Devise

Я настраиваю вход в Facebook с помощью Devise и omniauth с помощью этих инструкций https://github.com/plataformatec/devise/wiki/OmniAuth :-Обзор

Вики Devise дает некоторые инструкции по получению информации facebook из хэша, хранящегося в этой переменной request.env['omniauth.auth']Хеш см. внизу.

Например, в вики Devise есть два метода для пользователя .rbмодель

def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
  data = access_token.extra.raw_info
  if user = User.where(:email => data.email).first
    user
  else # Create a user with a stub password. 
    User.create!(:email => data.email, :password => Devise.friendly_token[0,20]) 
  end
end

def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"]

      end
    end
  end

Итак, используя приведенный ниже хеш, я добавил следующее к этим двум методам для получения имени и изображения

def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
  data = access_token.extra.raw_info
  if user = User.where(:email => data.email).first
    user
  else # Create a user with a stub password. 
    User.create!(:email => data.email, :password => Devise.friendly_token[0,20], :name => data.name, :image => access_token.info.image) #I added access_token.info.image based on first answer
  end
end

def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"]
        user.name = data["name"]
        user.image = access_token.info.image  #i changed this based on first answer below

      end
    end
  end

Затем, на мой взгляд, я добавил следующее, чтобы отобразить имя пользователя и изображение

Name:<%= user.name %>

Image: <%= image_tag user.image %>

Однако отображается только имя. Нет изображения.

В моей базе данных есть столбец nameи image. Имя из Facebook сохраняется, но в столбце изображения указано «ноль».

Есть идеи, как заставить изображение работать?

Хеш хранится вrequest.env['omniauth.auth']https://github.com/mkdynamic/omniauth-facebook/blob/master/lib/omniauth/strategies/facebook.rb# Л31-47

   info do
        prune!({
          'nickname' => raw_info['username'],
          'email' => raw_info['email'],
          'name' => raw_info['name'],
          'first_name' => raw_info['first_name'],
          'last_name' => raw_info['last_name'],
          'image' => "#{options[:secure_image_url] ? 'https' : 'http'}://graph.facebook.com/#{uid}/picture?type=square",
          'description' => raw_info['bio'],
          'urls' => {
            'Facebook' => raw_info['link'],
            'Website' => raw_info['website']
          },
          'location' => (raw_info['location'] || {})['name'],
          'verified' => raw_info['verified']
        })
      end

17
задан Leahcim 24 March 2012 в 05:37
поделиться