2016-09-08 6 views
6

जब कोई उपयोगकर्ता मेरी साइट पर आता है, तो मैं यह निर्धारित करने के लिए onAuthStateChanged का उपयोग करता हूं कि उपयोगकर्ता पिछले सत्र से पहले से साइन इन है या नहीं।onAuthStateChanged असंगत

मुख्य मुद्दा यह है कि यह उपयोगकर्ताओं के एक छोटे से% के लिए असंगत रहा है - कोड यह नहीं लगा रहा है कि उनके पास एक वैध साइन-इन सत्र चल रहा है।

निम्नलिखित कोड ऐप पर ही है, उपयोगकर्ता मुखपृष्ठ या लॉगिन पेज से रीडायरेक्ट के बाद उस पृष्ठ पर हैं।

साइट का मुखपृष्ठ भी यह निर्धारित करने के लिए onAuthStateChanged का उपयोग करता है कि उपयोगकर्ता को सीधे ऐप पर रीडायरेक्ट किया जाना चाहिए या नहीं। लॉगिन पृष्ठ signInWithEmailAndPassword का उपयोग करता है और जब लॉग इन सफल होता है, तो उन्हें ऐप पेज पर रीडायरेक्ट करता है (जिसमें निम्न कोड है)।

firebase.auth().onAuthStateChanged(function (authUser) { 
    if (authUser) return initApp(authUser); 

    // issue: sometimes users that *should* be signed-in get signed in anonymously here 
    firebase.auth().signInAnonymously().then(function (authUser) { 
    initApp(authUser); 
    } 
}); 

बस कुछ मैं अपने उपयोग के मामले के लिए उपयोग करना चाहिए नहीं onAuthStateChanged है? कोई विचार यह कैसे सुधार/ठीक करने के लिए?

संपादित करें: यह SEEMS मोबाइल पर उपयोगकर्ताओं के साथ और अधिक होने के लिए।

+1

सुनिश्चित करें कि आप अपने लॉगिन पेज पर रीडायरेक्ट करने से पहले साइन इन करने के लिए साइनइन WithEmailAndPassword के लिए प्रतीक्षा करें। यह हो सकता है कि आप समय-समय पर ऐप पेज पर रीडायरेक्ट कर रहे हों। इसके अलावा आपका कोड इनिट ऐप को दो बार अनाम साइन इन पर कॉल करता है क्योंकि ऑनएथस्टेट चेंजेड पर्यवेक्षक अज्ञात साइन इन के बाद फिर से ट्रिगर करेगा। – bojeil

+0

धन्यवाद। दाएं - कोड दोबारा चलाता है लेकिन मेरे पास 'initApp' फ़ंक्शन में 'userInitiated' चर है जो पहले से साइन इन किए गए उपयोगकर्ताओं को सही तरीके से प्रबंधित करने के लिए है। मुझे पिछले ऑनलाइन स्थिति को पुनर्स्थापित करने के लिए कभी-कभी याद किया जाने वाला initApp फ़ंक्शन की आवश्यकता होती है, भले ही उपयोगकर्ता वाईफ़ाई कनेक्शन हानि, या यादृच्छिक फ़ायरबेस रीकनेक्ट की वजह से दोबारा कनेक्ट होने के कारण ऑफलाइन हो जाएं। –

+0

और हाँ, मैं यह सुनिश्चित कर रहा हूं कि पुनर्निर्देशन से पहले साइनइन WithEmailAndPassword हल हो गया था। –

उत्तर

0

शायद तुम का उपयोग करना चाहिए JavaScript Cookies

1) उपयोगकर्ता को प्रवेश, टोकन (Firebase.Auth.currentUser)

2) पृष्ठ लोड पर कुकीज़

3) करने के लिए टोकन सहेजें मिलता है, लगता है कुकी पहले

4) यदि कुकी मौजूद हैं,, signInWithCustomToken समारोह

5) सत्र टाइमआउट तो फोन signInWithCustomToken को फिर से कॉल करें

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