2013-05-15 8 views
18

मेरा ऐप लंबे समय के लिए अच्छी तरह से काम कर रहा था, लेकिन अब मैं कह फेसबुक से त्रुटि हो रही है:फेसबुक अनुप्रेषित यूआरएल मुद्दा OAuthException

Content: {"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}

https://www.facebook.com/dialog/oauth/?client_id=163840537126360&redirect_uri=http://mycloud.niranjan.com/facebook/callback//empty/?vTitle=Facebook&scope=email,sms,user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,friends_birthday,user_education_history,friends_education_history,user_events,friends_events,user_likes,friends_likes,user_location,friends_location,user_photos,friends_photos,user_videos,friends_videos,user_relationships,friends_relationships,user_status,friends_status,user_checkins,friends_checkins,read_stream,publish_stream

किसी को भी इस एक के लिए एक समाधान सुझाव दे सकते हैं ?

+0

क्या आप यहां वर्तमान में 'redirect_uri' का उपयोग कर सकते हैं? – Lian

+0

https://www.facebook.com/dialog/oauth/?client_id=163840537126360&redirect_uri=http://mycloud.niranjan.com/facebook/callback//empty/?vTitle=Facebook&scope=email,sms,user_about_me,friends_about_me, user_activities, friends_activities, user_birthday, friends_birthday, user_education_history, friends_education_history, user_events, friends_events, user_likes, friends_likes, USER_LOCATION, friends_location, user_photos, friends_photos, user_videos, friends_videos, user_relationships, friends_relationships, user_status, friends_status, user_checkins, friends_checkins, read_stream, publish_stream –

+2

plz बनाने सुनिश्चित करें कि आपने फेसबुक ऐप पर जो रीडायरेक्ट_रल सेट किया है, वही होना चाहिए जो आप 'redirect_uri' –

उत्तर

12

निरंजन, हमने वही त्रुटि संदेश देखा, ठीक है। आप की तरह, यह इस महीने हो रहा है, हमारे कोड में कोई बदलाव किए बिना।

हमने सावधानी से सत्यापित किया कि रीडायरेक्ट_री वास्तव में दोनों कॉलों में बिल्कुल समान था - पहले प्राधिकृत कॉल, और दूसरा access_token कॉल।

हम Facebook के साथ दायर की है, लेकिन वे के रूप में "कम" यह triaged: https://developers.facebook.com/bugs/307245456075215?browse=search_51964e3320a5b5556208759

हमारे मामले में, हम कुछ असामान्य कर रहे थे (तो यह आपके मामले के लिए प्रासंगिक नहीं हो सकता है)। हमारा redirect_uri एक यूआरएल था जो एन्कोडेड पथ तत्व के रूप में एम्बेडेड एक और यूआरएल था। यूआरएल-इन-ए-यूआरएल, एफबी में पास होने पर दोगुनी-एन्कोडेड, ने फेसबुक एपीआई सर्वर के साथ समस्याएं पैदा कर दी थीं।

हमने नेस्टेड यूआरएल के एन्कोडिंग को% एन्कोडिंग के बजाए एक लंबे हेक्स नंबर पर बदलकर हल किया है, इसलिए सभी फेसबुक सर्वर एक सरल रीडायरेक्ट_री है जो पथ के भीतर कुछ हेक्स युक्त है, जो सामान्य यूआरएल एन्कोडिंग/डिकोडिंग से अप्रभावित है।

मेरा संदेह यह है कि फेसबुक ने अपने यूआरएल पैरामीटर को एन्कोड/डीकोड करने के तरीके को बदल दिया, शायद दो बार डीकोडिंग।

यदि आप हमारे जैसे कुछ कर रहे हैं, तो इस दृष्टिकोण को आजमाएं। यदि नहीं, तो यह देखने के लिए कि क्या आप काम करने के लिए कुछ प्राप्त कर सकते हैं, पूरी तरह से अलग और सरल रीडायरेक्ट_री आज़माएं। और सुनिश्चित करें कि आप सभी यूआरएल क्वेरी पैरामीटर सही ढंग से एन्कोडिंग/डिकोडिंग कर रहे हैं।

+1

तैयार करें धन्यवाद! यह ठीक है मेरे साथ क्या हुआ। मैंने पैरामीटर में अन्य यूआरएल के साथ यूआरएल रीडायरेक्ट भेजा। संभावित वर्कअराउंड - बेस 64 के रूप में आंतरिक यूआरएल एन्कोड करें, यह अच्छी तरह से काम करता है। –

+1

मेरे पास एक ही स्थिति है। क्या आप एक उदाहरण लिख सकते हैं - आपने पैरामीटर में यूआरएल कैसे एन्कोड किया था। लॉगिन के लिए uri मैं जेएस से भेजता हूं, लेकिन यूरी को कोड से access_token प्राप्त करने के लिए मैं सर्वर पक्ष से भेजता हूं (सी #)। क्या मुझे बिथ स्थानों में एन्कोड करना चाहिए? – Tatyana

16

मुझे एहसास है कि यह 6 सप्ताह देर हो चुकी है, लेकिन मुझे लगा कि मैं इसे यहां पोस्ट करूंगा क्योंकि मुझे एक फिक्स मिला जो हमारे लिए काम करता था। एक ही मुद्दा था और (जो काम नहीं किया) वापसी यूआरएल सांकेतिक शब्दों में बदलना करने की कोशिश कर के बाद, मुझे एहसास हुआ है कि हम अपने यूआरएल की तरह बना रहे थे:

$url = "http://example.com/"; 
$redirect_script = "/cgi-bin/redirect.cgi"; 

$redirect_url = $url . $redirect_script; 

हालांकि इस एक वापसी यूआरएल कि http://example.com//cgi-bin/redirect.cgi की तरह दिखाई देता में हुई - टिप्पणी example.com के बाद "//"। जब मैंने इस यूआरएल से डबल-स्लेश हटा दिए, तो उसने फिर से काम किया। ओपी, मुझे लगता है कि आपके रीडायरेक्ट यूआरएल में /facebook/callback//empty?etc में एक ही चीज़ है जो मुझे विश्वास है कि यह क्या गड़बड़ कर रहा है।

+2

आपको बहुत बहुत धन्यवाद ... मेरे लिए काम किया ... – user1589754

+1

मेरी समस्या "बहुत कम'/'" हो गई।'redirect_uri:" http: // localhost: 3001 "' काम नहीं किया। मुझे यूआरएल के बाद '/' जोड़ना पड़ा। 'redirect_uri:" http: // localhost: 3001/"' काम किया। मैंने सोचा कि इससे कोई फर्क नहीं पड़ता क्योंकि Google ने पूर्व को स्वीकार किया जबकि फेसबुक नहीं था। खैर, यह mattered और अब यह काम कर रहा है। आप सभी को धन्यवाद। – Akash

+1

@ आकाश मैं पुष्टि करता हूं! मुझे http: // localhost के साथ एक ही समस्या थी और मेरी समस्या को ठीक/जोड़ना (http: // localhost /) – Lothre1

4

आज एक ही समस्या थी, समस्या पता चला कि redirect_uri एक http इस्तेमाल किया जा करने के लिए: // URL स्कीमा, और फेसबुक केवल https स्वीकार करता है: //

+2

मैं बिना किसी समस्या के http का उपयोग करता हूं। –

+0

आप omniauth-facebook में रीडायरेक्ट यूआरआई कैसे बदलते हैं तो यह https पर जाता है? – unclesol

15

मेरे मामले में मैं http://127.0.0.1:8000 उपयोग कर रहा था - हालांकि अमेरिकन प्लान ओहथ पासिंग क्वेरी पैराम्स को सौदा करने के लिए OAuth रीडायरेक्ट में स्वचालित रूप से http://127.0.0.1:8000/ में परिवर्तन करता है। मेरे कोड में मेरे यूआरएल को अंत स्लैश करने के लिए मेरे लिए समस्या हल हो गई। मुझे संदेह है कि वे अंतिम उपयोग करने योग्य संस्करण को संग्रहित कर रहे हैं और दूसरे अनुरोध के मुकाबले इसकी तुलना कर रहे हैं।

+0

मेरे पास भी एक ही मामला है। धन्यवाद। – fightingmamoru

+0

यहां वही - यह मेरे लिए एक एफबी बग जैसा लगता है। –

1

यह ध्यान रखें कि यदि आप अपना लॉगिन URL में हालांकि https:// का उपयोग आप http:// उपयोग कर रहे हैं, तो यह एक OAuthException एक यूआरएल मुद्दे के बारे में फेंक कर देगी।

तो यदि आप इसका उपयोग कर रहे हैं तो आपको अपने लॉगिन यूआरएल में https:// का उपयोग करना होगा।

इससे मेरी समस्या हल हो गई।

1

मुझे कुछ अजीब फेसबुक व्यवहार का सामना करना पड़ा है।

मेरी साइट https चलाती है और मुझे हमेशा एक त्रुटि मिली है "सत्यापन कोड को सत्यापित करने में त्रुटि। कृपया सुनिश्चित करें कि आपका रीडायरेक्ट_री समान है"।

लेकिन फिर मैंने रीडायरेक्ट_री में और डेवलपर पैनल (ओएथ यूआरएल) में https को http में बदल दिया है, तो त्रुटि गायब हो जाती है और प्रमाणीकरण सही ढंग से काम करना शुरू कर देता है। लेकिन साइट अभी भी https चलाती है ...

उम्मीद है कि यह किसी की मदद करेगा।

+0

यह वही समाधान है कि कम से कम दो अन्य उत्तरों पहले से ही दिए गए हैं। – solarissmoke

+0

यह दो उत्तरों को हल करने के लिए एक विपरीत समाधान की तरह दिखता है। लेकिन यह काम करता है। –

1
मेरे मामले में

यह मेरी क्वेरी स्ट्रिंग में विशेष वर्ण की वजह से, मैं base64 कोड कि / और = शामिल था, मैं ! @ =/; जैसे कुछ पात्रों की कोशिश की सभी एक ही त्रुटि फेंक

केवल दो चरित्र कि तरह लग रहे मान्य है क्वेरी मदद नहीं की के अंत में -_#$

पुनश्च / है। यह क्वेरी स्ट्रिंग के बीच में भी निषिद्ध है

0

मो हाड ए सही है, मैंने $ चरित्र का उपयोग करने का प्रबंधन भी नहीं किया।

2 सरल कार्यों ने लिखा है कि मुझे मानकों के साथ जटिल वापसी यूआरएल का उपयोग करने की अनुमति देता है:

public static string EncodeFacebookReturnUrl(string url) 
{ 
    return Regex.Replace(HttpUtility.UrlEncode(url), "%", "_-_"); 
} 

public static string DecodeFacebookReturnUrl(string url) 
{ 
    return HttpUtility.UrlDecode(Regex.Replace(url, "_-_", "%")); 
} 

केवल 1 "अवैध" चरित्र (%) में UrlEncode परिणामों के साथ अनुवाद कर रहा है, जो मैं कानूनी के साथ की जगह ले रहा हूँ स्ट्रिंग _-_। इसे डीकोड करने के लिए भी आसान बनाता है।

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