decioferreira / omniauth-linkedin-oauth2

A LinkedIn OAuth2 strategy for OmniAuth.
MIT License
117 stars 147 forks source link

Grab a higher resolution photo? #22

Open abrambailey opened 9 years ago

abrambailey commented 9 years ago

Is it possible. The photo is pretty terrible. Thanks

abrambailey commented 9 years ago

Please see https://developer.linkedin.com/forum/how-can-i-get-big-profile-picture

ishields commented 6 years ago

@abrambailey It seems this link is dead. I'm seeing a lot of places suggest adding "picture-urls::(original)" to the field in devise.rb

config.omniauth :linkedin, app_key, app_secret,
                      scope: 'r_basicprofile r_emailaddress',
                      fields: %w(id email-address first-name last-name picture-urls::(original))

but this does not seem to work. I get all of the other fields but no additional picture urls are returned. At first I thought linkedin changed their api but it still references this field in their documentation.

abrambailey commented 6 years ago

I did this ... https://github.com/abrambailey/omniauth-linkedin-oauth2/commit/58b732e4eaff896e58590643af849203344497c1

Then in omniauth callbacks controller

  def linkedin
    # You need to implement the method below in your model (e.g. app/models/user.rb)
    @user = User.find_for_linkedin_oauth2(request.env["omniauth.auth"])
    if @user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "LinkedIn"
      sign_in_and_redirect @user, :event => :authentication
    else
      session["devise.linkedin_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end

Then in user.rb

  def self.find_for_linkedin_oauth2(access_token, signed_in_resource=nil)
    data = access_token.info
    user = User.where(:email => data["email"]).first
     unless user
       if (data[:image][:values] rescue nil) != nil
         url = data[:image][:values][0]
         user = User.create(
            username: data["name"],
            email: data["email"],
            password: Devise.friendly_token[0,20],
            role_ids: [Role.find_by(name: "dispenser").id],
            avatar: open(url)
         )
       else
         user = User.create(
            username: data["name"],
            email: data["email"],
            password: Devise.friendly_token[0,20],
            role_ids: [Role.find_by(name: "dispenser").id]
         )
       end
     end
    user
  end
ishields commented 6 years ago

Hmmm and this still works for you as of today? - I'm doing something very similar. I've added the "'picture-urls::(original)'" to fields as well (did this in devise.rb instead) but "url = data[:image][:values][0]" never returns anything.

abrambailey commented 6 years ago

https://www.hearingtracker.com/users/sign_in

Try it and let me know. Just fill in your name and sex, and I'll remove your account.

ishields commented 6 years ago

image

Doesn't seem like it worked :(

abrambailey commented 6 years ago

Well crap. Thanks for noticing this bug. I guess no one reported it to me, and we weren't testing it.

abrambailey commented 6 years ago

Not even sure when it stopped working.

ishields commented 6 years ago

https://stackoverflow.com/questions/49050669/linked-in-omniauth-photo-urls-or-picture-urlsoriginal-not-being-returned/49060907#49060907

abrambailey commented 6 years ago

I'm actually amazed that I caught it this quickly. Thanks @ishields !

abrambailey commented 6 years ago

Deleted your user account, email, etc, from our server. Fwiw.