Open2

Google OAuth LoginをReact ✖️ Viteで実装する📝

まさぴょん🐱まさぴょん🐱

GCP側の設定📝

OAuth同意画面

プロジェクト構成

OAuthクライアントの作成

認証情報が作成される📝

テストユーザーの追加📝

まさぴょん🐱まさぴょん🐱

React ✖️ Vite側

pnpm add @react-oauth/google

GoogleOAuthProviderを設定する📝

GOOGLE_CLIENT_ID は、環境変数から取得するように設定📝

import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import "./index.css";
import HomePage from "./pages/home/index.tsx";
import { GoogleOAuthProvider } from "@react-oauth/google";
import { GOOGLE_CLIENT_ID } from "@/constants/env";

// Vite React App のエントリーポイント
// id="root" のDOMに対してReactをマウントする
createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <GoogleOAuthProvider clientId={GOOGLE_CLIENT_ID}>
      <div className="w-full h-full">
        <HomePage />
      </div>
    </GoogleOAuthProvider>
  </StrictMode>
);

Google Login Button実装📝

import { CredentialResponse, GoogleLogin } from "@react-oauth/google";
import { jwtDecode } from "jwt-decode";

export const GoogleLoginButton = () => {
  /** ログイン成功時の処理 */
  const handleLoginSuccess = (credentialResponse: CredentialResponse) => {
    if (!credentialResponse.credential) {
      throw new Error("credentialResponse.credential is undefined");
    }

    // JWT をデコードしてユーザー情報を取得する。
    const decoded = jwtDecode(credentialResponse.credential);
    console.log("ログイン成功:", decoded);
    // 例: { name: "ユーザー名", email: "メールアドレス", sub: "Google ID" }
  };

  /** ログイン失敗時の処理 */
  const handleLoginError = () => {
    console.log("ログインに失敗しました");
    throw new Error("ログインに失敗しました");
  };

  return (
    <GoogleLogin onSuccess={handleLoginSuccess} onError={handleLoginError} />
  );
};

参考情報📝

https://www.npmjs.com/package/@react-oauth/google

https://github.com/MomenSherif/react-oauth

https://blog.symdon.info/posts/1663329365/