🧯

Next.js × firebase で Google Logout 実装

2021/07/01に公開

Logout の呼び出し

公式ドキュメントによる Logout コードの記述は以下のとおり

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

それに reload (ユーザーの更新) を加え、以下のように export します

src/service/firebase.js
export const logOut = () => {
  firebase
    .auth()
    .signOut()
    .then(() => {
      console.log("logged out");
      document.location.reload();
    })
    .catch((error) => {
      console.log(error.message);
    });
};

Login button と Logout button を出し分ける

今回 Header に Login button を実装したため、ユーザーの情報の有無によって Login button と Logout button を切り替えられるようにします

  • 条件分岐は好みにより三項演算子を用いています
  • npm i object-dig により obuject-dig をインストールしています
  • object-dig を使用し、 currentUser uid の値を取得できるようにします
src/components/Header.jsx
import { useContext } from "react";
import { signInWithGoogle, logOut } from "../service/firebase";
import dig from "object-dig";
import { AuthContext } from "../providers/AuthProviders";

export const Header = () => {
  const currentUser = useContext(AuthContext);
  console.log(currentUser);
  const changeLogButton = () => {
    let changeLogButtonDom;
    {
      dig(currentUser, "currentUser", "uid")
        ? (changeLogButtonDom = <button onClick={logOut}>Logout</button>)
        : (changeLogButtonDom = (
            <button onClick={signInWithGoogle}>Login</button>
          ));
    }
    return changeLogButtonDom;
  };
  return <div>{changeLogButton()}</div>;
};

これにて Logout の実装は完了!

Discussion