簡體   English   中英

新的LinkedIn權限問題(Rails omniauth-linkedin gem)

[英]New LinkedIn Permissions Problems (Rails omniauth-linkedin gem)

我在我的rails應用程序中使用omniauth-linkedin gem:

https://github.com/skorks/omniauth-linkedin

它應該考慮新的LinkedIn權限請求過程和范圍,但我沒有成功獲取電子郵件地址或完整配置文件(除默認配置文件概述之外的任何其他內容)。

這是我的omniauth.rb文件:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_fullprofile r_emailaddress'
end

在用戶輸入她/他的憑據之前,完整的個人資料和電子郵件地址請求最初會進入LinkedIn。 但是,一旦用戶登錄,范圍請求就會丟失,並且只能訪問默認的配置文件概述信息。

我認為我的問題與必須在我想要的范圍內專門請求那些字段有關,如gem頁面(https://github.com/skorks/omniauth-linkedin)中所述。 盡管如此,我還是嘗試向omniauth.rb文件添加特定字段請求但沒有成功(下面的電子郵件字段請求):

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_fullprofile+r_emailaddress',
  :fields => ["id", "email-address", "first-name", "last-name", "headline", "industry", "picture-url", "public-profile-url", "location", "positions", "educations"]
end

顯然,除了非默認字段(如電子郵件地址,職位和教育)之外,我還應該請求配置文件概述的默認字段,以便訪問后面的非默認字段。

LinkedIn電子郵件地址應該是直截了當的,因為它不是像職位或教育這樣的結構化對象,而且我相信我缺少我想要的職位和教育中的特定領域的代碼(不知道我會怎么寫並且會喜歡一些輸入也是如此)。 我正在使用我的新API密鑰,所以我不確定問題是什么。 我需要LinkedIn的某種特殊許可嗎? 感謝幫助! 謝謝。

另外,這是我的auth控制器的相關代碼:

require 'linkedin'

class AuthController < ApplicationController

  def auth
    client = LinkedIn::Client.new(ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'])

    request_token = client.request_token(:oauth_callback => 
                                      "http://#{request.host_with_port}/callback")

    session[:rtoken] = request_token.token
    session[:rsecret] = request_token.secret

    redirect_to client.request_token.authorize_url
  end

  def callback

    client = LinkedIn::Client.new(ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'])

    if current_user.atoken.nil? && current_user.asecret.nil?
      pin = params[:oauth_verifier]
      atoken, asecret = client.authorize_from_request(session[:rtoken], session[:rsecret], pin)
      current_user.atoken = atoken
      current_user.asecret = asecret
      current_user.uid = client.profile(:fields => ["id"]).id
      flash.now[:success] = 'Signed in with LinkedIn.'
    elsif current_user.atoken && current_user.asecret 
      client.authorize_from_access(current_user.atoken, current_user.asecret)
      flash.now[:success] = 'Signed in with LinkedIn.'
    end

不確定這是否是最優雅的解決方案,但這對我有用

我剛添加了配置,其中包含在request_token_path中傳遞的范圍

LINKEDIN_CONFIGURATION = { :site => 'https://api.linkedin.com',
:authorize_path => '/uas/oauth/authenticate',
:request_token_path =>'/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress+r_network+r_contactinfo',
:access_token_path => '/uas/oauth/accessToken' }

client = LinkedIn::Client.new(LINKEDIN_API_KEY, LINKEDIN_SECRET_KEY, LINKEDIN_CONFIGURATION )

其余代碼是一樣的。

一定要在回調方法中更改客戶端構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM