2016-09-08 12 views
6

ユーザーが自分のサイトにアクセスしたとき、私はonAuthStateChangedを使用して、そのユーザーが以前のセッションから既にサインインしているかどうかを判断します。onAuthStateChanged inconsistent

主な問題は、少数のユーザーにとって矛盾していることです。コードは、有効なサインインされたセッションが続いていることを検出していないようです。

次のコードはアプリ自体に表示されています。ユーザーはホームページやログインページからリダイレクトした後にそのページに表示されます。

サイトのホームページも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私の使用例で使用しているはずのものではありませんか?これを改善/修正する方法は?

編集:これは、モバイルでユーザーがさらに増えることを示しています。

+1

ログインページでリダイレクトする前にsignInWithEmailAndPasswordが解決するのを待ってください。アプリケーションページに早めにリダイレクトしている可能性があります。また、上のコードでは、匿名のサインイン後にonAuthStateChangedオブザーバが再度トリガーするため、initAppを匿名で2回呼び出します。 – bojeil

+0

ありがとうございます。そうですね - コードが再び動くのですが、既にサインインしたユーザーを適切に処理するために 'initApp'関数に' userInitiated'変数があります。私は、以前のオンライン状態を復元するために時々リコールされるinitApp関数が必要です.Wifi接続が失われたり、Firebaseが再接続して再接続したためにユーザーがオフラインになったとしても、 –

+0

はい、私は、signInWithEmailAndPasswordがリダイレクトの前に解決されたことを確認しています。 –

答えて

0

たぶん、あなたが見つける、ページロードでクッキー

3)にトークンを保存します)ユーザーがサインインした場合、トークン(Firebase.Auth.currentUser

2を取得)JavaScript Cookies

1を使用する必要がありますクッキー第

4)は、クッキーが存在する場合、セッションタイムアウト場合signInWithCustomToken機能

5)を呼び出し、 signInWithCustomTokenにもう一度お電話ください。

関連する問題