簡體   English   中英

Linkedin Oauth與Rails

[英]Linkedin Oauth with Rails

我們已經成功連接了Linkedin已有一段時間。 但是,我們有時會出現一些錯誤,我希望有人可以幫助您對此有所了解。 這是我們的代碼:

def linkedin_login
  request_token = Linkedin.client.request_token(oauth_callback: "http://#{SITE_URL}/linkedin/auth/")
  session[:linkedin_request_token] = request_token.token
  session[:linkedin_request_secret] = request_token.secret
  redirect_to request_token.authorize_url
end

def linkedin_auth
  raise "Don't have proper session or oauth_verifier" if session[:linkedin_request_token].blank? or session[:linkedin_request_secret].blank? or params[:oauth_verifier].blank?
  access_token = Linkedin.client.authorize_from_request(session[:linkedin_request_token], session[:linkedin_request_secret], params[:oauth_verifier])
  raise "Nil access token" if access_token.blank?
  redirect_to linkedin_process_path(token: access_token.first, secret: access_token.second)
end

我們比我期望的更多地達到了“提高'沒有適當的會話或oauth_verifier'”的作用。 在查看ENV中的錯誤時,這些人沒有使用原始方法設置的會話值。 我們在應用程序控制器上設置了before_filters,因此初始化了會話,所以我知道它是活動的。

我的下一個想法是“ request_token”是否正在生成值request_token,我嘗試了很多次,它們都帶回了一些東西。 我們每天都會收到很多這些。 錯誤發生后,如果用戶再次嘗試,它會正常工作,這就是為什么我很困惑。

有什么想法可能導致這種情況?

根據您的代碼,似乎每次用戶登錄到您的應用程序時都在進行請求令牌調用。 這不是正確的身份驗證方法。 您實際上只需要獲取一次請求令牌,然后使用該令牌升級訪問令牌(就像您在linkedin_auth方法中所做的一樣)。 從那里,只需將訪問令牌和密鑰保存在數據庫中,並在需要為該特定用戶進行API調用時隨時獲取即可。

我們的身份驗證在此處進行了更詳細的描述: https : //developer.linkedin.com/documents/authentication

另外,這只是個人喜好,但我喜歡將OAuth gem用於Rails,而不是使用LinkedIn包裝。 它易於使用且重量輕。

僅作為示例,您可以通過以下方式進行身份驗證:

require 'oauth'

def auth

  api_key = 'XXXXXXXXX'
  api_secret = 'XXXXXXXXX'
  configuration = { :site => 'https://api.linkedin.com',
                    :authorize_path =>   'https://www.linkedin.com/uas/oauth/authenticate',
                    :request_token_path => 'https://api.linkedin.com/uas/oauth/requestToken',
                    :access_token_path => 'https://api.linkedin.com/uas/oauth/accessToken' }

  consumer = OAuth::Consumer.new(api_key, api_secret, configuration)

  #Request token
  request_token = consumer.get_request_token

  # Output request URL to console
  puts "Please visit this URL: https://api.linkedin.com/uas/oauth/authenticate?oauth_token=" + request_token.token  + " in your browser and then input the numerical code you are provided here: "

  # Set verifier code
  verifier = $stdin.gets.strip

  # Retrieve access token object
  @access_token = request_token.get_access_token(:oauth_verifier => verifier)  
end

您只需要在用戶首次授權您的應用程序時調用此方法。 保存其訪問令牌,然后將其用於后續的API調用。 注意,我的示例使用控制台輸入PIN驗證器。 在真實的示例中,您希望以編程方式將PIN保存在會話變量或內存中,然后使用它來獲取訪問令牌。

暫無
暫無

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

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