2011-02-22 30 views
5

Sitemde Facebook ile Giriş özelliğini etkinleştirmeye çalışıyorum ve Facebook'tan erişim belirteci almaya çalışırken bir engel oluşturmaya çalışıyorum. İşte benim kodudur:Raylar EOF Facebook erişim belirteci almak için HTTP.get_response kullanılırken hata oluştu

Bu bir yetki kodu ( params[:code]) almak için ilk yönlendirme hedefi olan fblogin denetleyici işlevi içinde olduğunu
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 

. Net::HTTP.get_response(token_uri) hattında

EOFError in AuthController#fblogin

: Bu aracılığıyla çalıştırmak

Ama şu hatayı alıyorum. Her yeri aradım ve bunun ne anlama geldiğini gösteren bir şey bulamadım. Facebook'un erişim belirteçlerinde kullandığı belirsiz karakterler olabilir mi? Tamamen kayboldum!

+0

Bu Ruby 1.9 mu? Öyleyse, güvenilir CA sertifikaları içeren bir CRT dosyasını manuel olarak yapılandırmanız gerekir, bkz. Http://martinottenwaelter.fr/2010/12/ruby19-and-the-ssl-error/ –

cevap

10

Yalnızca http ile çalışan bir kod kullanarak bir https URL'sine bağlanmaya çalıştığınız için bir EOFError alıyorsunuz. Temel bilgiler için this Net::HTTP Cheat Sheet numaralı "SSL/HTTPS isteği" bölümüne bakın.

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

Eğer gerçekten isterseniz:

Ancak, böyle kod yazmak istiyorum nerede, Facebook'un OAuth2 API kullanan için, sizin için bu yönetmek için bir üçüncü taraf kitaplığı kullanarak gibi OAuth2 öneriyoruz istekleri kendiniz yapmak için, sizin için HTTPS isteklerini yürütmek üzere Faraday gibi kütüphanelere bakabilirsiniz.

+0

Teşekkürler, mükemmel cevap! Kimlik doğrulama akışını daha iyi anlamak için istekleri kendim yazmayı denedim (bu sadece bir öğrenme projesidir). Ama OAuth2'ye daha yakından bakarım! –

İlgili konular