2014-10-15 8 views
7

मैं फ़ायरबेस 1.1 का समर्थन करने के लिए अपने एंजुलरजेस ऐप को अपडेट करने की कोशिश कर रहा हूं (मैं फायरबेस 1.0.x के साथ चिपक गया था)।
यह फायरबेसिसप्लॉग्लिन को हटा देता है, जिसमें फायरबेस कोर के अंदर प्रमाणीकरण शामिल है।फायरबेस एथविथऑथथैरेक्ट()

मैं सफलतापूर्वक

authWithOAuthPopup("<provider>", function(error, authData) { ... }); 

का उपयोग कर यह एक कॉलबैक, जो authData में प्रमाणीकरण डेटा पारित हो जाता है स्वीकार करता है प्रमाणीकरण को लागू करने में सक्षम है।

इसके विपरीत, मैं undersand नहीं कर सकते

authWithOAuthRedirect("<provider>", function(error) { ... }); 

Firebase Authentication docs page उपयोग करने के लिए कैसे बहुत संक्षिप्त है ... :-(यह सब क्या कहा जाता है:।

वैकल्पिक रूप से [बजाय authWithOAuthPopup], आप उपयोगकर्ता को एक पूर्ण ब्राउज़र रीडायरेक्ट के साथ लॉगिन करने के लिए संकेत दे सकते हैं, और जब आप मूल पृष्ठ

पर वापस आते हैं तो फ़ायरबेस स्वचालित रूप से सत्र को पुनर्स्थापित कर देगा।

मैं authData कैसे प्राप्त करूं, जब फायरबेस - पुनर्निर्देशन के बाद - मेरे पृष्ठ पर वापस आ जाता है?

+0

'ref.onAuth (फ़ंक्शन (authData) {...}' आपके लिए काम करेगा? Https://www.firebase.com/docs/web/guide/user-auth.html#section-monitoring- प्रमाणीकरण –

+0

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

+0

यदि यह असंबंधित है, तो मैं एक नया प्रश्न पोस्ट करूंगा। –

उत्तर

8

ऑथडाटा सीधे श्रोता पर एक श्रोता पंजीकृत करके उपलब्ध है (इसलिए authWithOAuthRedirect पर कॉल करने से पहले)।

ref.onAuth(function(authData) { 
    ... 
} 
ref.authWithOAuthRedirect("google", function(error) { ... }); 

https://www.firebase.com/docs/web/guide/user-auth.html#section-monitoring-authentication

+0

मैं एंगुलरफायर का उपयोग कर रहा हूं प्रभावी रूप से एक ही चीज़ ('$ ref। $ onAuth', $ ref। $ authWithOauthRedirect')। * * रीडायरेक्ट सी के बाद ompletes, '$ onAuth' कॉलबैक नहीं कहा जाता है और मुझे लॉग इन करने के लिए पृष्ठ को रीफ्रेश करना होगा। दूसरा उत्तर पृष्ठ को मैन्युअल रूप से पुनः लोड करने का समाधान प्रदान करता है, लेकिन मैं इसे करने से बचना चाहता हूं। कोई अन्य विचार? –

+0

^मेरे लिए एक ही समस्या! क्या आपको एक समाधान मिला? – mikeLspohn

4

देखें मुझे लगता है कि मैं तुम्हें रूप में एक ही मुद्दे में चल रहा हूँ। मैं फेसबुक प्रमाणीकरण करने की कोशिश कर रहा हूँ।

सबसे पहले, मैं अपने मुद्दे के लिए प्रजनन चरणों को स्पष्ट करना चाहता हूं।

  1. मेरा ऐप क्लाइंट पर लोड किया गया है।
  2. उपयोगकर्ता क्लिक फेसबुक के साथ लॉगिन।
  3. ref.authWithOAuthRedirect ('facebook', ...) कहा जाता है।
  4. ग्राहक फेसबुक पर भेज दिया जाएगा और फेसबुक authData === अशक्त के साथ वापस आ Firebase एप्लिकेशन
  5. करने के लिए ग्राहक पुनर्निर्देश फेसबुक, कॉलबैक (केवल एक बार) onAuth के लिए पारित() शुरू हो जाती है साथ सफल प्रमाणीकरण के बावजूद।

ऑनथ() पर पास की गई कॉलबैक सही ऑथडाटा के साथ दूसरी बार नहीं आती है।

हालांकि, ऐप को पुनः लोड करने से कॉलबैक को सही ऑथडाटा के साथ बुलाया जाता है। इसके कारण मेरे लिए ज्ञात नहीं हैं लेकिन मुझे दौड़ की स्थिति पर संदेह है।

यहां मेरा कामकाज है।

ref.authWithOAuthRedirect ('facebook', ...) को कॉल करने से पहले सत्रस्टोर में स्वयं को ध्वज सेट करें।

sessionStorage.reload = true; 
ref.authWithOAuthRedirect('facebook', ...) 

जब ग्राहक फेसबुक से आपके एप्लिकेशन पर वापस रीडायरेक्ट किया जाता है, तो आप यदि आवश्यक हो तो इस ध्वज के लिए जाँच करें और पृष्ठ पुनः लोड करने में सक्षम होना चाहिए।

if (sessionStorage.reload) { 
    delete sessionStorage.reload; 
    setTimeout(function() { 
     location.reload(); 
    }, 1000) 
} 

सेटटाइमआउट (फ़ंक्शन() {...}, 1000) अनुमानित दौड़ की स्थिति से लड़ने में मदद करता है। मुझे पता चला कि दौड़ की स्थिति को हल करने के लिए 500 एमएस अपर्याप्त समय है।

और एक छोटा गोचाचा: यदि आप पृष्ठ को बहुत जल्द पुनः लोड करते हैं, तो ऑथडाटा शून्य रहता है इससे कोई फर्क नहीं पड़ता कि आप पृष्ठ को कितनी बार पुनः लोड करते हैं।

+0

धन्यवाद, इसने Google ऑथ के साथ अपने रीडायरेक्ट मुद्दों को ठीक किया। मुझे संदेह है कि getAuth() रीडायरेक्ट प्रतिक्रिया में तुल्यकालिक/अवरुद्ध नहीं है। – gerryster

+0

मैं इस समस्या को भी देख रहा हूं। @ निकिता क्या आपको कभी भी पुनः लोड करने के कारण कारण या बेहतर समाधान मिला है? मैं $ authWithOAuthRedirect कॉल करने से पहले ref $ $Auth का भी उपयोग कर रहा हूं, लेकिन मुझे एक ही परिणाम मिलते हैं। मेरे मामले में, मैं पहले प्रयास के बाद $ authWithOAuthRedirect को दूसरे प्रयास के रूप में बुला रहा हूं, ऑथडाटा सेट नहीं किया था। – ozkary