2011-02-22 16 views
5

पुनर्प्राप्त करने के लिए HTTP.get_response का उपयोग करते समय मैं अपनी साइट पर फेसबुक फीचर के साथ एक लॉगिन लागू करने की कोशिश कर रहा हूं, और फेसबुक से वापस टोकन एक्सेस करने की कोशिश कर रहा हूं। यहाँ मेरी कोड है:रेलवे ईओएफ त्रुटि जब फेसबुक एक्सेस टोकन

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) लाइन पर

:

लेकिन जब मैं इस के माध्यम से चलाने के लिए, मैं निम्नलिखित त्रुटि मिलती है। मैंने पूरी तरह से खोज की है, और यह इंगित करने के लिए कुछ भी नहीं मिला कि इसका क्या अर्थ है। क्या यह उनके पहुंच टोकन में फेसबुक का उपयोग करने वाले अस्पष्ट चरित्र हो सकता है? मैं पूरी तरह से खो गया हूँ!

+0

क्या यह रूबी 1.9 है? यदि ऐसा है, तो आपको विश्वसनीय सीए कर्ट वाले एक सीआरटी फ़ाइल को मैन्युअल रूप से कॉन्फ़िगर करना होगा, http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/ –

उत्तर

10

आपको EOFError प्राप्त हो रहा है क्योंकि आप के साथ काम करने वाले कोड का उपयोग कर https URL से कनेक्ट करने का प्रयास कर रहे हैं। मूल बातें के लिए this Net::HTTP Cheat Sheet पर "SSL/HTTPS अनुरोध" नामक अनुभाग देखें।

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')) 

तुम सच में चाहते हैं:

हालांकि, मैं आप के लिए यह प्रबंधन करने के लिए एक तीसरे पक्ष के पुस्तकालय का उपयोग कर, इस तरह के रूप OAuth2 फेसबुक के OAuth2 एपीआई का उपयोग, जहाँ आप इस तरह कोड लिखने चाहते हैं के लिए सिफारिश करेंगे अनुरोध स्वयं करने के लिए, आप अपने लिए HTTPS अनुरोध निष्पादित करने के लिए Faraday जैसे पुस्तकालयों को देख सकते हैं।

+0

देखें, सही उत्तर! मैं प्रमाणन प्रवाह को बेहतर ढंग से समझने के लिए खुद को अनुरोध लिखने का प्रयास कर रहा था (यह सिर्फ एक सीखने की परियोजना है)। लेकिन मैं ओएथ 2 को एक नजदीक दिखूंगा! –

संबंधित मुद्दे