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} />
);
};
参考情報📝