簡體   English   中英

Rails EOF使用HTTP.get_response檢索Facebook訪問令牌時出錯

[英]Rails EOF Error when using HTTP.get_response to retrieve Facebook access token

我試圖在我的網站上實現Login with Facebook功能,並試圖從Facebook獲取訪問令牌。 這是我的代碼:

if params[:error_reason] == "user_denied" then
  flash[:error] = "To login with Facebook, you must click 'Allow' to let the site access your information"
  redirect_to :login
elsif params[:code] then
  token_uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=****************&redirect_uri=http://localhost:3000/auth/fblogin&client_secret=***************&code="+URI.escape(params[:code]))
  response = Net::HTTP.get_response(token_uri)
  session[:response] = response
  data = ActiveSupport::JSON.decode(response)
  access_token = data[:access_token]
  flash[:error] = access_token
  redirect_to :register
end

這是一個fblogin控制器函數,它是獲取授權代碼的初始重定向的目標( params[:code] )。

但是當我遇到這個問題時,我收到以下錯誤:

EOFError in AuthController#fblogin

Net::HTTP.get_response(token_uri)行。 我到處搜索過,找不到任何表明這意味着什么的東西。 它可能是Facebook在訪問令牌中使用的模糊字符嗎? 我完全迷路了!

您收到EOFError因為您嘗試使用僅適用於http代碼連接到https URL。 有關基礎知識,請參閱此Net :: HTTP備忘單中標題為“SSL / HTTPS請求”的部分。

不過,我會建議使用第三方庫來管理這個給你,如OAuth2用戶的使用Facebook的API的OAuth2,在那里你會寫這樣的代碼:

def client
  OAuth2::Client.new('app_id', 'app_secret', :site => 'https://graph.facebook.com')
end

# in your callback code:
access_token = client.web_server.get_access_token(params[:code], :redirect_uri => 'http://localhost:3000/auth/fblogin')
user = JSON.parse(access_token.get('/me'))

如果您真的想自己提出請求,可以查看像Faraday這樣的庫來為您執行HTTPS請求。

暫無
暫無

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

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