Supabase Googleログイン - 一般設定
インストール手順とこのプラグインの全マークダウンガイドを含むセットアップ用の質問をコピーします。
このガイドでは、Capacitor Social Login プラグインを使用して、Google Sign-InとSupabase Authenticationを統合する方法を説明します。この設定では、モバイルプラットフォームでネイティブのGoogle Sign-Inを使用しながら、バックエンドの認証にSupabase Authを活用できます。
開始する前に、以下を確認してください。
-
Read the Google Login General Setup Google OAuth の設定方法を学びましょう
-
各プラットフォームの設定方法を参考にして、Google OAuth の設定を実施してください。
Google OAuth プロバイダーを Supabase に有効にする
「Google OAuth プロバイダーを Supabase に有効にする」のセクション-
Go to your __CAPGO_KEEP_0__ Supabase __CAPGO_KEEP_0__
-
Click on your __CAPGO_KEEP_0__
-
Do go to the __CAPGO_KEEP_0__
Authenticationmenu
-
Click on the __CAPGO_KEEP_2__
Providers__CAPGO_KEEP_2__ __CAPGO_KEEP_3__
-
provider
Googleプロバイダー
-
プロバイダーを有効にする
-
使用する予定のプラットフォームごとにクライアントIDを追加する
-
ボタンをクリック
Saveボタン
このガイドでは、Google Sign-Inの設定は必要ありません。
このガイドでは、Google Sign-Inの設定は必要ありません。
このガイドでは、Google Sign-Inの設定は必要ありません。このガイドでは、Google Sign-Inの設定は必要ありません。
「1. Nonce の生成」のセクション
実装では、nonce の要件に従って安全な nonce Pair を生成します。 コピー:
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Generate nonce pairasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}: URL 安全のランダム文字列 (64 の 16 進数文字)
rawNonce: SHA-256 のハッシュnonceDigestCopy to clipboardrawNonce(__CAPGO_KEEP_0__)nonceDigestGoogle Sign-In により渡されるnonceのハッシュ値がIDトークンに含まれます。rawNonceSupabase には、nonceのハッシュ値が渡されます。Supabaseは、トークンのnonceとハッシュ値を比較します。
2. Google Sign-In
「2. Google Sign-In」この関数はプラグインを初期化し、Googleでサインインします。
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. JWT検証
「3. JWT検証」Supabaseにトークンを送る前に、実装ではJWTトークンを検証します。
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}なぜSupabase前に検証する必要があるのですか?
SupabaseのJWTトークンを送信する前に、トークンを検証することは、重要な目的を果たす:
-
無効なリクエストの防止: トークンに不正な受信者またはnonceの不一致がある場合、Supabaseはトークンを拒否します。検証することで、不必要なAPI呼び出しを回避し、明確なエラーメッセージを提供します。
-
トークンキャッシュの問題: 一部のプラットフォーム(iOSを含む)では、Google Sign-InSDKはキャッシュされたトークンをパフォーマンスのためにキャッシュすることがあります。キャッシュされたトークンが返された場合、キャッシュされたトークンは、異なるnonce(またはnonceが存在しない場合)で生成された可能性があり、Supabaseによってトークンが「nonceの不一致」エラーで拒否される可能性があります。検証することで、トークンが生成されたnonceが正しいかどうかを検出できます。また、キャッシュされたトークンを自動的に再試行して、最新のトークンを取得できます。
-
セキュリティ (iOS): iOSでは、検証により、トークンがあなたの特定のGoogle Client IDで発行されたことを確認できます。これにより、他のアプリケーション用に意図されたトークンを使用することによる潜在的なセキュリティ上の問題を防ぐことができます。
-
エラー処理の向上: Supabaseに送信する前に検証することで、トークンが不正である場合に自動的にリトライするロジックを実行できます。これは、iOSのキャッシュ問題を透明に扱うために不可欠です。
検証が失敗した場合、関数は自動的に:
- Googleからログアウト(キャッシュされたトークンをクリア - iOSでは重要)
- 再度認証を1回実行(正しいnonceでトークンを生成することを強制)
- 再試行も失敗した場合、エラーを返します。
4. Supabaseサインイン
セクション「4. Supabaseサインイン」最終的に、検証されたトークンはSupabaseに送信されます。
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Complete Code リファレンス
セクション「Complete Code リファレンス」実装の詳細は、 例のアプリの supabaseAuthUtils.ts ファイルにあります。これには次のものが含まれます。
getUrlSafeNonce()- URL安全のランダムなnonceを生成します。sha256Hash()- SHA-256で文字列をハッシュします。getNonce()- 非同期トークン生成decodeJWT()- JWTトークンをデコードvalidateJWTToken()- JWTの受信者と非同期トークンを検証authenticateWithGoogleSupabase()- 自動リトライ機能付きの主な認証関数
追加の例ファイル
セクション「追加の例ファイル」- SupabasePage.tsx - リダイレクトハンドリングを含むWeb用の例コンポーネント
- SupabaseCreateAccountPage.tsx - アカウント作成ページの例
次のステップ
セクション「次のステップ」目的のプラットフォームに応じたプラットフォーム固有のセットアップガイドに進みましょう: