web-dev-qa-db-ja.com

ユーザーが既にFirebaseにログインしているかどうかを検出するにはどうすればよいですか?

Googleログインのjavascriptファイルでfirebase node apiを使用しています。

firebase.initializeApp(config);
let provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);

これは正常に機能し、ユーザーは自分のGoogle資格情報でログインできます。ユーザーがページに再度アクセスすると、ポップアップが再び開きますが、すでにログインしているため、ユーザーの操作を必要とせずにポップアップが閉じます。ポップアップを促す前に、すでにログインしているユーザーがいるかどうかを確認する方法はありますか?

60
Jophin Joseph

https://firebase.google.com/docs/auth/web/manage-users

認証状態変更オブザーバーを追加する必要があります。

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});
64
bojeil

currentUserがあるかどうかも確認できます

var user = firebase.auth().currentUser;

if (user) {
  // User is signed in.
} else {
  // No user is signed in.
}
55
Passos

このシナリオでは、onAuthStateChanged()関数を使用する必要はありません。

次のコマンドを実行することにより、ユーザーがログインしているかどうかを簡単に検出できます。

var user = firebase.auth().currentUser;

「nullを返す」問題に直面している人にとっては、firebase呼び出しが完了するのを待っていないからです。

ページAでログインアクションを実行し、ページBを呼び出した場合、次のJSコードを呼び出して、予想される動作をテストできます。

  var config = {
    apiKey: "....",
    authDomain: "...",
    databaseURL: "...",
    projectId: "..",
    storageBucket: "..",
    messagingSenderId: ".."
  };
  firebase.initializeApp(config);

    $( document ).ready(function() {
        console.log( "testing.." );
        var user = firebase.auth().currentUser;
        console.log(user);
    });

ユーザーがログインしている場合、「var user」には予想されるJSONペイロードが含まれます。そうでない場合は、単に「null」になります

そして、それはあなたが必要とするすべてです。

よろしく

12

もう1つの方法は、firebaseが使用するものと同じものを使用することです。

たとえば、ユーザーがログインすると、firebaseはローカルストレージに以下の詳細を保存します。ユーザーがページに戻ると、firebaseは同じ方法を使用して、ユーザーが自動的にログインする必要があるかどうかを識別します。

enter image description here

ATTN:これはFirebaseにリストされておらず、推奨されていません。これを非公式な方法でこのメソッドと呼ぶことができます。つまり、firebaseが内部の動作を変更した場合、このメソッドは機能しない可能性があります。または要するに。自己責任! :)

2
ravish.hacker