2011-08-06 11 views
5

उपयोगकर्ताओं को ट्विटर और फेसबुक के साथ साइन इन/साइन अप करने की कोशिश कर रहा है। ट्विटर कोई समस्या नहीं करता है लेकिन फेसबुक के लिए रणनीति अलग है।प्रमाणित करने के लिए फेसबुक का उपयोग नहीं कर सकता: OAuth2 के लिए अपरिभाषित विधि 'web_server'?

undefined method `web_server' for #<OAuth2::Client:0x00000005211d58> 

ट्रेस से पता चलता

oa-oauth (0.0.1) lib/omniauth/strategies/oauth2.rb:18:in `request_phase' 
oa-oauth (0.0.1) lib/omniauth/strategies/facebook.rb:28:in `request_phase' 
oa-core (0.0.5) lib/omniauth/strategy.rb:25:in `call!' 
oa-core (0.0.5) lib/omniauth/strategy.rb:19:in `call' 
oa-core (0.0.5) lib/omniauth/builder.rb:22:in `call' 
warden (1.0.5) lib/warden/manager.rb:35:in `block in call' 
warden (1.0.5) lib/warden/manager.rb:34:in `catch' 
warden (1.0.5) lib/warden/manager.rb:34:in `call' 

किसी और को यह अनुभव?

ps। मैं निम्नलिखित जवाहरात उपयोग कर रहा हूँ:

gem 'oa-oauth', :require => 'omniauth/oauth' 
gem 'oauth2' 

मैं अन्य रत्नों के साथ अपने पता निर्भरता संघर्ष के रूप में पूर्ण omniauth मणि ​​का उपयोग नहीं कर रहा हूँ।

+0

आपको OAuth2 किस संस्करण का उपयोग कर रहे हैं? जहां तक ​​मैं कह सकता हूं, ओएथ 2 विनिर्देश कितनी तेजी से बदलता है, यह काफी तेज़ी से अपडेट किया जाता है। मुझे आपके जैसे ही समस्या मिल रही है जब मैं सॉक्ररी मणि का उपयोग करता हूं जो oauth2 संस्करण 0.5.0 –

+0

का उपयोग करने का प्रयास करता है मैं वर्तमान में Oauth2 0.4.1 का उपयोग कर रहा हूं – digitalWestie

उत्तर

4

मैं जब facebook_oauth (https://github.com/moomerman/facebook_oauth) मेरी रेल एप्लिकेशन पर उपयोग करने की कोशिश में एक ही समस्या में पड़ गए। एक घंटे या उसके कोड को बदलने की कोशिश करने के बाद, मुझे एहसास हुआ कि ओउथ 2 का उपयोग करना आसान हो सकता है। मैंने समस्या हल की और अब उस मध्यवर्ती पुस्तकालय की कोई ज़रूरत नहीं है।

Gemfile में

gem 'oauth2' 

जोड़ने फिर

bundle update

तब चलाने के लिए, अपने login_via_facebook विधि में आप या तो स्वयं संवाद uri का निर्माण या इन पंक्तियों के साथ OAuth क्लाइंट कुछ का उपयोग करें: यहाँ है कैसे :

oauth_client = OAuth2::Client.new(APPLICATION_ID, APPLICATION_SECRET, { 
    :authorize_url => 'https://www.facebook.com/dialog/oauth' 
}) 

redirect_to oauth_client.authorize_url({ 
    :client_id => APPLICATION_ID, 
    :redirect_uri => YOUR_REDIRECT_URL 
}) 

आप अतिरिक्त अनुमतियों का अनुरोध करने, authorize_url कॉल में scope पैरामीटर निर्दिष्ट की जरूरत है:

redirect_to oauth_client.authorize_url({ 
    :client_id => APPLICATION_ID, 
    :redirect_uri => YOUR_REDIRECT_URL, 
    :scope => 'offline_access,email' 
}) 

तो विधि है कि YOUR_REDIRECT_URL संभालती में, (मैं मेरा login_via_facebook_callback कहते हैं), कुछ इस तरह करते हैं:

oauth_client = OAuth2::Client.new(APPLICATION_ID, APPLICATION_SECRET, { 
    :site => 'https://graph.facebook.com', 
    :token_url => '/oauth/access_token' 
}) 

begin 

    access_token = oauth_client.get_token({ 
     :client_id => APPLICATION_ID, 
     :client_secret => APPLICATION_SECRET, 
     :redirect_uri => YOUR_REDIRECT_URL, 
     :code => params[:code], 
     :parse => :query 
    }) 

    access_token.options[:mode] = :query 
    access_token.options[:param_name] = :access_token 
    facebook_user_info = access_token.get('/me', {:parse => :json}).parsed 

rescue Error => e 

    # You will need this error during development to make progress :) 
    #logger.error(e) 

end 

अब facebook_user_info में मूल उपयोगकर्ता जानकारी है!

1

मैं ने वही समस्या थी, तो आपको दो बातें की कोशिश करनी चाहिए:

  1. मैं भी परस्पर विरोधी मणि मुद्दों/निर्भरता मुद्दों था और मेरे gemfile में इस जोड़कर उन्हें हल हो:

मणि 'omniauth',: Git => 'Git: //github.com/intridea/omniauth.git'

  1. जो उल्लेखनीय कुछ ही समय में एक ट्विटर/फेसबुक ऐप शुरू करने के लिए अच्छी तरह से काम एक रेल आवेदन टेम्पलेट का उपयोग कर प्रयास करें, अपने टर्मिनल में इस कमांड चलाएँ: नई APP_NAME -m

रेल https://github.com/RailsApps/rails3-application-templates/raw/master/rails3-mongoid-omniauth-template.rb -टी

आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: https://github.com/RailsApps/rails3-mongoid-omniauth/wiki/Tutorial

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