Firebaseの認証を使ってみた話

要約

Firebase Authenticationを使って、Reactアプリケーションで簡単にユーザー認証を実装しました。この記事では、その手順を詳しく説明します。同じ機能をReact/Spring Bootで実装するよりもはるかに簡単だったので、備忘録として記載します。

やりたいこと

ポートフォリオサイトの管理者認証のために、Firebase Authenticationを使用して1つのユーザーを作成し、そのユーザーで認証すること。

使用した機能

・Firebase Authentication
(※ユーザー作成機能は今回実施しておりません)

現状

Firebaseやfirebasetoolsのインストールおよびログインが済んでいることが前提です。必要であれば、手順1,2を実施後、以下のコマンドを実行してください。

npm install -g firebase-tools
npm install firebase
firebase login
firebase init

手順

1.Firebaseプロジェクトの設定

まず、Firebaseコンソールからプロジェクトを作成し、ウェブアプリを追加します。Firebaseコンソールで表示される設定情報(APIキーやプロジェクトIDなど)をコピーしておきます。

2.Firebaseの設定ファイルを作成

次に、Firebaseの設定を行います。
・firebase-config.ts

import { initializeApp } from "firebase/app";
import { getAuth, signInWithEmailAndPassword } from "firebase/auth";

// Firebaseプロジェクトの設定
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_PROJECT_ID.appspot.com",
  messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
  appId: "YOUR_APP_ID",
  measurementId: "YOUR_MEASUREMENT_ID"
};

const app = initializeApp(firebaseConfig);
const auth = getAuth(app);

export { auth, signInWithEmailAndPassword };

3.ログインコンポーネントの作成

・Login.tsx

import React, { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { auth, signInWithEmailAndPassword } from "../../firebase-config"; // firebase-configからauthをインポート

const Login: React.FC = () => {
  const [username, setUsername] = useState("");
  const [password, setPassword] = useState("");
  const [error, setError] = useState<string | null>(null);
  const navigate = useNavigate();

  useEffect(() => {
    // CSRFトークンの取得などの初期設定
  }, []);

  const handleLogin = async (e: React.FormEvent) => {
    e.preventDefault();

    try {
      // 認証処理
      const userCredential = await signInWithEmailAndPassword(auth, username, password);
      const user = userCredential.user;
      if (user) {
        localStorage.setItem("isAuthenticated", "true");
        localStorage.setItem("username", username); // ユーザー名などの情報を保存
        navigate("/admin");
      } else {
        setError("ログインに失敗しました");
      }
    } catch (error) {
      console.error("ログインエラー:", error);
      setError("ログインに失敗しました");
    }
  };

  return (
    <div className="login-container">
      <div className="login-form">
        <h1>ログイン</h1>
        {error && <p>{error}</p>}
        <form onSubmit={handleLogin}>
          <div className="form-group">
            <label htmlFor="username">ユーザー名</label>
            <input
              type="text"
              id="username"
              value={username}
              onChange={(e) => setUsername(e.target.value)}
              required
            />
          </div>
          <div className="form-group">
            <label htmlFor="password">パスワード</label>
            <input
              type="password"
              id="password"
              value={password}
              onChange={(e) => setPassword.next(value)}
              required
            />
          </div>
          <div className="form-group">
            <button type="submit">ログイン</button>
          </div>
        </form>
      </div>
    </div>
  );
};

export default Login;

4.ユーザの作成

Firebaseコンソールを開きます。
https://console.firebase.google.com/

左のタブにある、Authenticationをクリック
ユーザタブにある「ユーザを追加」を押下して設定

5.動作確認

npm start 

ログイン画面で認証すると認証が完了です!!!
isAuthenticatedをtrueにセットしてReact上で認証されているステータスにできます!

 try {
      // 認証処理
      const userCredential = await signInWithEmailAndPassword(auth, username, password);
      const user = userCredential.user;
      if (user) {
        localStorage.setItem("isAuthenticated", "true");
        localStorage.setItem("username", username); // ユーザー名などの情報を保存
        navigate("/admin");
      } else {
        setError("ログインに失敗しました");
      }
    } catch (error) {
      console.error("ログインエラー:", error);
      setError("ログインに失敗しました");
    }
  };

まとめ

Firebase Authenticationを使ってReactアプリケーションに認証機能を実装する方法を説明しました。同じ機能をSpring Bootで実装するよりもはるかに簡単で、迅速に開発できました。Firebaseの強力な機能と使いやすさを活用して、さらに効率的に開発を進めていきましょう。

今後もFirebaseを活用し、開発の進捗や新たな発見を共有していきます。お楽しみに!

作成したポートフォリオはこちら↓
https://kaneharaweb.com/


この記事が気に入ったらサポートをしてみませんか?