大型个人资料图像与全能领英Ruby宝石



我正在使用omniauth-linkedin gem来允许用户使用他们的LinkedIn帐户登录到我的Rails应用程序。我目前使用auth.info.image来存储用户的LinkedIn个人资料图像URL:

user.rb

def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.first_name = auth.info.first_name
      user.last_name = auth.info.last_name
      user.email = auth.info.email
      user.linkedin_photo_url = auth.info.image
      user.password = Devise.friendly_token[0,20]
    end

但是,图像非常小(50x50)。除了auth.info.image之外,我还可以使用其他方法来拉出用户主配置文件页面上的大型配置文件图像吗?

谢谢!

编辑:我使用omniauth-linkedinomniauth宝石。看起来linkedin宝石有一个选项来确定图像大小的方法,但我正在努力实现它与全能领英宝石。这个自述解释了这是可能的,但解释缺乏一些细节。有人能帮我弄明白吗?

https://github.com/skorks/omniauth-linkedin using-it-with-the-linkedin-gem

我知道已经有一段时间了,但我只是在寻找这个,我想我把它留在这里。解决方案很好,但会引起额外的呼叫。Omniauth已经在获取配置文件了所以我们只需要让它也获取原始图片

linkedin_options = {
  scope: 'r_fullprofile r_emailaddress',
  fields: ['id', 'email-address', 'first-name', 'last-name', 'headline', 'location', 'industry', 'picture-url', 'public-profile-url', "picture-urls::(original)"]
}
provider :linkedin, app_id,app_secret, linkedin_options

pictureUrls将在额外信息中提供。

要获取图像,使用auth_hash[:extra][:raw_info][:pictureUrls][:values].first

检索原始大小的配置文件图像的一种方法是单独调用API。

  1. 包含gem 'linkedin'
  2. create initializer file/config/initializers/linkedin。Rb,内容:

    LinkedIn。配置do |config|配置。token = "你的LinkedIn应用consumer_key"配置。Secret = "your consumer_secret"结束

  3. 在self.from_omniauth方法中替换行

    用户。linkedin_photo_url = auth.info.image

client = LinkedIn::Client.new
client.authorize_from_access(auth.extra.access_token.token, auth.extra.access_token.secret)
user.linkedin_photo_url = client.picture_urls.all.first
完成

image = auth.extra.raw_info.pictureUrls.values.last.first

这是我使用全能宝石,设计和回形针的组合:

配置初始化/devise.rb

config.omniauth :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'],
          scope: 'r_basicprofile r_emailaddress',
          fields: ['id', 'email-address', 'first-name', 'last-name',   'picture-urls::(original)']

app/模型/user.rb

def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_create.tap do |user| # .tap will run the |user| block regardless if is first or create
    user.email = auth.info.email
    user.password = Devise.friendly_token[0,20]
    user.firstname = auth.info.first_name
    user.lastname = auth.info.last_name
    if auth.provider == 'facebook'
      user.avatar = URI.parse(auth.info.image)
    elsif auth.provider == 'linkedin'
      user.avatar = URI.parse(auth.extra.raw_info.pictureUrls.values.last.first)
    end
    user.skip_confirmation!
  end
end

相关内容

  • 没有找到相关文章