2013-02-11 18 views
8

के साथ मोबाइल एप्लिकेशन के लिए रेल में एपीआई बना रहा हूं। अब उपयोगकर्ता फेसबुक का उपयोग करके लॉगिन करेगा और मैं एक्सेस टोकन पोस्ट फेसबुक प्रमाणीकरण प्राप्त कर दूंगा। मुझे यह एक्सेस टोकन लेना है और जांचें कि अनुप्रयोग डेटाबेस में एक्सेस टोकन मौजूद है या नहीं। यदि ऐसा होता है तो उपयोगकर्ता पहुंच की अनुमति देता है, यदि नहीं, तो ईमेल की जांच करें और पहुंच टोकन अपडेट करें और उपयोगकर्ता पहुंच की अनुमति दें।फेसबुक लॉगिन के लिए omniauth का उपयोग केवल एक्सेस टोकन

मैं इसे omniauth-facebook और devise के साथ कैसे पूरा कर सकता हूं, जहां तक ​​मैं देख सकता हूं कि omniauth-facebook जमीन से सबकुछ करता है, केवल omniauth-facebook पर पहुंच टोकन प्रदान करने का कोई तरीका नहीं मिल सकता है।

कोई भी मदद मदद महान होगी।

उत्तर

14

आपको omniauth-facebook की आवश्यकता नहीं है। इस मणि का उद्देश्य केवल एक्सेस टोकन प्राप्त करना है (और उपयोगकर्ता की सूचनाओं से पूछताछ करें)। यहाँ कैसे चीजें (वसीयत और omniauth-फेसबुक के साथ) एक मानक सेटअप में होती है:

  • Omniauth पहुंच टोकन यह अनुरोध के परिवेश में
  • Omniauth फेसबुक के एपीआई और दुकानों के माध्यम से के माध्यम से हासिल करेगा उपयोगकर्ता की जानकारियां प्राप्त
  • Omniauth अपने आवेदन में एक कस्टम कॉलबैक विधि है कि आप
  • इसके लिए कॉलबैक विधि को पुन: प्राप्त या डेटाबेस में उपयोगकर्ता बनाता है लिखने की ज़रूरत कहता है, तो वसीयत द्वारा प्रदान की कुछ सहायकों का उपयोग करता है में उपयोगकर्ता हस्ताक्षर करने के लिए।

(अधिक जानकारी के लिए Devise's documentation about Omniauth देखें)

अब, यह देखते हुए आप पहले से ही पहुंच टोकन है, और है कि फेसबुक के एपीआई से उपयोगकर्ता की जानकारियां प्राप्त करते समय बहुत सरल है, आप वास्तव में omniauth-फेसबुक जरूरत नहीं है।

  • पहुँच टोकन
  • खोजने में उनकी (एक पैरामीटर के रूप)
  • लाने उपयोगकर्ताओं जानकारियां (/me करने के लिए एक ग्राफ़ API अनुरोध):

    तुम सब करने की ज़रूरत के लिए कोई कार्रवाई लिखना है या (उपयोगकर्ता के फेसबुक आईडी का उपयोग कर) डेटाबेस में उपयोगकर्ता

  • वसीयत के सहायकों का उपयोग करने में उपयोगकर्ता साइन इन बनाना

यह कोड Devise's documentation में दिए गए उदाहरण पर आधारित है।

class Users::FacebookCallbacksController 
    def facebook 
    # You should test if params[:access_token] is present 
    # and if this request fails 
    facebook_data = HTTParty.get("https://graph.facebook.com/me", query: { 
     access_token: params[:access_token] 
    }).parsed_response 

    # You need to implement the method below in your model (e.g. app/models/user.rb) 
    @user = User.find_for_facebook_oauth(facebook_data) 

    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 
     set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 
    else 
     session["devise.facebook_data"] = facebook_data 
     redirect_to new_user_registration_url 
    end 
    end 
end 

नोट्स:

  • मैं HTTParty gem यहाँ उपयोग कर रहा हूँ फेसबुक एपीआई कॉल लेकिन कुछ अन्य संभावनाएं हैं, Koala
  • sign_in_and_redirect, set_flash_message और is_navigational_format? जैसी सहायकों वसीयत द्वारा प्रदान की जाती हैं
  • User.find_for_facebook_oauth के कार्यान्वयन के लिए Devise's documentation का संदर्भ लें
  • devise_facebook_open_graph नामक एक मणि एक ही चीज़ को थोड़ा अलग तरीके से करता है।यह वास्तव में उपयोग या रखरखाव नहीं है, लेकिन आप कार्यान्वयन से रुचि हो सकती है।
संबंधित मुद्दे