2016-09-08 16 views
6

Bir kullanıcı siteme geldiğinde, kullanıcının daha önceki bir oturumda oturum açmış olup olmadığını belirlemek için onAuthStateChanged kullanın.onAuthStateChanged tutarsız

Ana sorun, kullanıcıların% küçük bir kısmı için tutarsız olduğu - kodun geçerli bir oturum açma oturumunun devam ettiğini algılamıyor gibi görünüyor.

Aşağıdaki kod uygulamanın kendisinde, kullanıcılar ana sayfadan veya giriş sayfasından bir yönlendirmeden sonra bu sayfada.

Sitenin ana sayfası, kullanıcının doğrudan uygulamaya yönlendirilip yönlendirilmemesi gerektiğini belirlemek için onAuthStateChanged kullanır. Oturum açma sayfası, signInWithEmailAndPassword kullanır ve oturum açma başarılı olduğunda, bunları uygulama sayfasına yönlendirir (aşağıdaki kodu içerir).

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); 
    } 
}); 

bir şey benim kullanım durumu için kullanıyor olmalıdır değil onAuthStateChanged mi? Bunu nasıl düzeltebilirim/düzeltebilirim?

Düzenleme: Bu SEEMS, mobil cihaz kullanıcılarıyla daha fazla gerçekleşir.

+1

Oturum açma sayfanıza yeniden yönlendirme yapmadan önce çözmek için signInWithEmailAndPassword değerini beklediğinizden emin olun. Önceden uygulama sayfasına yönlendiriyor olabilirsiniz. Ayrıca yukarıdaki kodunuz anonim oturumda initApp çağrılarını iki kez çağırır, çünkü onAuthStateChanged gözlemcisi anonim giriş yaptıktan sonra tekrar tetikler. – bojeil

+0

Teşekkür ederiz. Sağ - kod tekrar çalışır ancak ben zaten giriş yapmış olan kullanıcıları doğru şekilde işlemek için initApp fonksiyonunda bir 'userInitiated' değişkenine sahibim. Kullanıcıların wifi bağlantı kaybı veya rasgele Firebase yeniden bağlanması nedeniyle yeniden bağlanmaları nedeniyle çevrimdışı olsa da bazen önceki çevrimiçi durumu geri yüklemek için initApp işlevine ihtiyacım var. –

+0

Ve evet, signInWithEmailAndPassword yönlendirme işleminden önce çözümlendiğinden emin oldum. –

cevap