2012-03-16 14 views
7

मैं, तीसरे पक्ष के प्रमाणीकरण की स्थापना के लिए, सिवाय इसके कि मैं इसे नहीं बल्कि ट्विटर से फेसबुक, जिसमें उन्होंने RailsCast 235 मेंफेसबुक

सेट के साथ कोशिश कर रहा हूँ Omniauth प्रयोग करने के लिए रयान बाते के निर्देशों का पालन कर रहा हूँ के साथ प्रमाणित नहीं कर सकते 3000/प्रमाणन/फेसबुक और फेसबुक लॉगिन (भले ही यह अंततः काम नहीं करेगा के साथ प्रस्तुत किया:

omniauth-फेसबुक मणि स्थापित करने, और स्थापित करने प्रारंभकर्ता

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, 'APP_ID', 'APP_SECRET' 

end 

मैं स्थानीय होस्ट करने के लिए जाने में सक्षम होना चाहिए के बाद क्योंकि हमने अभी तक कॉलबैक यूआरएल सेट नहीं किया है) हालांकि, जब मैं उस यूआरएल पर जाता हूं, तो मुझे यह त्रुटि मिलती है

{ 
    "error": { 
     "message": "Error validating application.", 
     "type": "OAuthException", 
     "code": 101 
    } 
} 

और यूआरएल वास्तव में मेरे एप्लिकेशन पर

https://graph.facebook.com/oauth/authorize?response_type=code&client_id=APP_ID&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Ffacebook%2Fcallback&scope=email%2Coffline_access 

में परिवर्तन, मैं वसीयत वसीयत विकि पर दिए गए निर्देशों का फेसबुक प्राधिकरण एकीकृत करने के लिए निर्धारित किया है और का पालन किया है https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

किसी को भी मुझे बता सकते हैं समस्या क्या हो सकती है?

त्रुटि संदेश पर एक Google खोज कर पता चला है कि काफी कुछ लोगों को हाल के सप्ताहों में इस समस्या का अनुभव किया है, लेकिन एक समाधान enter image description here

+5

टिप्पणी के बिना downvote? बचपन – Leahcim

+1

+1 वोट ऑफसेट करना, मुझे कानूनी लगता है। – Gary

उत्तर

7

मैंने 101 की खोज की और मैं this page पर ठोकर खाई। जैसा कि आप देख सकते हैं, वह त्रुटि अमान्य API कुंजी है, इसलिए मेरा मानना ​​है कि समस्या उस स्थान पर है जहां आपने अपनी कुंजी परिभाषित की है।

आपको चाहिये अपने प्रमुख और एक अलग फाइल (स्पष्टता और सुरक्षा के लिए) में अपने गुप्त की स्थापना की लेकिन ध्यान रखना चाहिए कि वर्णमाला क्रम में रेल भार फ़ाइलों तो फ़ाइल है कि उन स्थिरांक को परिभाषित करता है एक ऐसा नाम है जो पहले आता होना चाहिए वह फ़ाइल जो ओथ कनेक्शन को कॉन्फ़िगर करती है। मेरे मामले में, मैंने constants.rb नामक एक फ़ाइल बनाई, जो devise.rb से पहले आता है। साथ ही, इस फ़ाइल को स्रोत नियंत्रण से दूर रखना सुनिश्चित करें। आप नहीं चाहते कि अन्य लोगों को आपकी चाबियाँ और रहस्य हों।

# config/initializers/constants.rb 
FACEBOOK_KEY = 'string' 
FACEBOOK_SECRET = 'string' 

तो अगर आप उपयोग कर रहे हैं वसीयत या अपने omniauth फ़ाइल में यदि आप सरल omniauth उपयोग कर रहे हैं अपने वसीयत फ़ाइल में अपने कनेक्शन कॉन्फ़िगर:

# config/initializers/devise.rb|omniauth.rb 
require 'omniauth-facebook' 
config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET 

अब, वहाँ का उपयोग कर यह करने के लिए एक बेहतर तरीका है एनएनवी चर मैं Figaro gem की अनुशंसा करता हूं क्योंकि यह वास्तव में ऐप्स को कॉन्फ़िगर करने में आसान बनाता है।

आप एक पॉपअप के रूप में फेसबुक संवाद पृष्ठ प्रदर्शित करना चाहते हैं, तो आप

config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, :display => 'popup' 

उपयोग का बाद में सड़क के नीचे this question पर गौर करना चाहेंगे।

और, यदि आप विंडोज़ पर हैं, तो आपको एक प्रमाणपत्र की आवश्यकता होगी ताकि SSL कनेक्शन विफल न हो। इस समस्या का समाधान Arcolye here द्वारा स्पष्ट किया गया है।

अंत में, स्थानीय रूप से अपने लॉगिन का परीक्षण करने के लिए, आपको बस अपनी साइट यूआरएल http://localhost:3000/ के रूप में परिभाषित करने की ज़रूरत है। वह सब कुछ है। आप को अपने कैनवास यूआरएल को परिभाषित करना है।

+0

आश्चर्यजनक रूप से, मुझे आपके समाधान के साथ एक ही त्रुटि मिली लेकिन जब मैंने फेसबुक_की और facebook_secret के लिए प्रमाणीकरण संख्या सीधे कॉन्फ़िगर/प्रारंभकर्ता/devise.rb (यानी स्थिरांक फ़ाइल में स्थिरांक का उपयोग नहीं किया) तो यह काम किया ... – Leahcim

+0

क्या आप एक एनएनवी चर का उपयोग कर रहे थे? – Ashitaka

+0

आपके उत्तर देने से पहले मैं टर्मिनल में पर्यावरण चर का उपयोग कर रहा था (और मैंने बिना सफलता के Heroku पर पर्यावरण चर का भी परीक्षण किया)। फिर आपके उत्तर देने के बाद मैंने आपके द्वारा सुझाए गए अनुसार मूल कुंजी को स्थिरांक फ़ाइल में डाल दिया। यह काम नहीं करता था, लेकिन फिर जब मैंने चाबियाँ तैयार कीं। आरबी ने काम किया ... मैं वापस जा रहा हूं और आज रात बाद में और अधिक जांच कर रहा हूं लेकिन मुझे लगता है कि यही हुआ। कम से कम हम एक समाधान के करीब हैं :) – Leahcim

0

पहले से कोई भी नहीं मिला, यह सुनिश्चित करें कि आप routes.rb में निम्नलिखित है:

# Auth callback routes 
match '/auth/:provider/callback' => 'sessions#create' # This route is hit when a user gives the app permissions (the auth hash will be in request.env['omniauth.auth']) 
match '/auth/failure' => 'sessions#failure' # This route is hit when a user doesn't give the app permissions 

दूसरा, सुनिश्चित करें कि आप config/initializers/omniauth.rb में निम्नलिखित है:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, 'APP_ID', 'APP_SECRET', :scope => 'email', :display => 'page' 
end 

तीसरा, सुनिश्चित करें कि आपके कैनवास URL आपकी फेसबुक ऐप सेटिंग्स (https://developers.facebook.com/apps/) में http://localhost:3000/ सेट है।

फिर आप बस उन्हें करने के लिए प्रमाणीकरण संवाद प्रदर्शित करने के लिए http://localhost:3000/auth/facebook करने के लिए अपने उपयोगकर्ताओं को पुनर्निर्देशित करने के लिए सक्षम होना चाहिए।

+0

मैंने उन परिवर्तन किए हैं लेकिन मुझे अभी भी एक ही त्रुटि मिल रही है। – Leahcim

+1

मुझे तब यकीन नहीं है। मैं अपने ऐप के लिए omniauth-facebook मणि का उपयोग करता हूं और यह विज्ञापित के रूप में काम करता है। खोज के बाद, ऐसा लगता है कि एकमात्र संभावित मामला यह है कि या तो आपका 'APP_ID' ​​या 'APP_SECRET' गलत है। इन मानों को दो बार जांचें। –

+0

क्या आपके पास सेटअप के साथ जिथब पर एक सार्वजनिक परियोजना है? – Leahcim

3

अतीत में, मुझे फेसबुक एप्लिकेशन के साथ लोकलहोस्ट का उपयोग करने में कोई समस्या थी। मैंने जो किया वह मेरे कंप्यूटर पर fbdev.com को स्थानीयहोस्ट पर इंगित करने के लिए मेरी मेजबान फ़ाइल में एक प्रविष्टि बनाना था और फेसबुक पर ऐप सेटिंग्स में स्थानीयहोस्ट के स्थान पर "fbdev.com" का उपयोग किया गया था।

1

मुझे एक ही त्रुटि मिल रही थी, लेकिन मैं अपना APP_ID और APP_SECRET जोड़ने के बाद सर्वर को पुनरारंभ करना भूल गया था: -P शायद इससे मदद मिलेगी?

+0

हाहा। धन्यवाद। इसने समस्या हल की। – uohzxela

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