【Firebase】firebase auth+webでログアウトした際の不具合2箇所

研究
OLYMPUS PEN E-PL9 (c)Maya
この記事は約4分で読めます。

この記事は1年前の記事です。当時の情報、理解に基づいておりますのでご留意ください

ログアウト時のアラートが2回出た

自分で作ってて自分で踏んだ。
まずひとつ。公式からのコピペで
以下の実装をしていた際に、ログアウト時のアラートが2回出た。

document.querySelector("#logout_form").addEventListener("submit", function(event) {
  if(confirm('ログアウトします。よろしいですか?')){
    firebase.auth().onAuthStateChanged( (user) => {
      firebase.auth().signOut().then(()=>{
        alert("ログアウトしました");
        location.reload();
      })
      .catch( (error)=>{
        var errorCode = error.code;
        var errorMessage = error.message;
        alert(errorCode + ', ' + errorMessage);
      });
    });
  }
  event.preventDefault();
}, false);

よく考えたら
・何かしら認証ステータスが変わった際に→signOut()を試み→アラート
という次第で循環してしまっているだけなのでは。

document.querySelector("#logout_form").addEventListener("submit", function(event) {
  if(confirm('ログアウトします。よろしいですか?')){
    firebase.auth().signOut().then(()=>{
      console.log('L282');
      alert("ログアウトしました。");
      location.reload();
    })
    .catch( (error)=>{
      var errorCode = error.code;
      var errorMessage = error.message;
      alert(errorCode + ', ' + errorMessage);
    });
    event.preventDefault();
  }
}, false);

直接signOut()を呼び出すように修正し、ことなきを得ました。

スナップショット取得の権限がないと叱られた

一方、同じタイミングなんですが

    query.onSnapshot(function(snapshot) {
      snapshot.docChanges().forEach(function(change) {
        (略)
      });
   });

とスナップショットを取得していたのが、権限がなく取得できないと叱られていました。

Cloud Firestore でリアルタイム アップデートを入手する  |  Firebase
db.collection("cities")
    .onSnapshot(function(snapshot) {
        //...
    }, function(error) {
        //...
    });

上記のように、スナップショットのエラーを明示的に拾うように対応。

    query.onSnapshot(function(snapshot) {
      snapshot.docChanges().forEach(function(change) {
        (略)
      });
    }, function(error) {
      console.log(error.message );
    });

こちらも事なきを得ました。

コメント

タイトルとURLをコピーしました