Supabase Google Login - General Setup
__CAPGO_KEEP_0__をコピーして、インストール手順とこのプラグインの全マークダウンガイドを含む設定の質問を取得する。
このガイドでは、Capacitor ソーシャルログインプラグインを使用して、Google Sign-InをSupabase Authenticationと統合する方法を説明します。この設定では、モバイルプラットフォームでネイティブのGoogle Sign-Inを使用しながら、バックエンドの認証にSupabase Authを活用できます。
前提条件
「前提条件」のセクション開始する前に、以下を確認してください。
-
「Google Login General Setup」を読みました。 Google OAuthのクレデンシャルを設定するためのガイド ターゲットプラットフォーム向けのGoogle OAuthのクレデンシャルを設定するためのプラットフォーム固有のガイドを参照してください。
-
Followed the respective platform-specific guides to setup Google OAuth credentials for your target platform:
Supabase で Google OAuth プロバイダーを有効にする
Supabase で Google OAuth プロバイダーを有効にする-
Google OAuth プロバイダーを有効にするには、 Supabase ダッシュボード
-
プロジェクト
-
Do go to the
Authenticationメニュー
-
Click on the
Providersタブ
-
Find the
Googleプロバイダー
-
プロバイダーを有効化
-
各プラットフォームで使用する予定のプラットフォームのクライアントIDを追加
-
ボタンをクリック
Saveボタン
GoogleサインインとSupabase認証ヘルパーのしくみ
GoogleサインインとSupabase認証ヘルパーのしくみ
このセクションでは、GoogleサインインとSupabaseの内部動作を説明します。 このフローを理解することで、認証プロセスの実装とトラブルシューティングを支援できます。完全な実装
1. Nonce Generation
セクション「1. Nonce Generation」実装は、Supabase nonce 要件に従って安全な nonce Pair を生成します。 Supabase nonce 要件:
// 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 };}フロー:
rawNonce: URL 安全なランダム文字列 (64 16 進数文字)nonceDigest: SHA-256 ハッシュrawNonce(16 進数エンコード)nonceDigestGoogle Sign-In には nonce Digest が含まれます → Google は ID トークンに nonce Digest を含めますrawNonceSupabase には nonce の raw 値が含まれます → Supabase は nonce のハッシュ値とトークンの nonce を比較します
2. Google Sign-In
Section titled “2. Google Sign-In”Capgoプラグインを初期化し、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検証
Section titled “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トークンを検証することは、以下の重要な目的を果たします。
-
無効なリクエストを防ぐ: Supabaseはトークンが不正な受信者またはnonceの不一致の場合でも、トークンを拒否します。最初に検証することで、不必要なAPIコールを回避し、明確なエラーメッセージを提供します。
-
トークンキャッシュ問題: iOSのプラットフォーム (特にiOS) では、Google Sign-In SDK がパフォーマンスのためにトークンをキャッシュすることがあります。キャッシュされたトークンが返された場合、キャッシュされたトークンは異なるnonce (またはnonceが存在しない場合) で生成された可能性があり、Supabaseがトークンを「nonceの不一致」エラーで拒否する可能性があります。トークンをSupabaseに送る前に検証することで、早期にこの問題を検出し、自動リトライを実行して新しいトークンを取得できます。
-
Security (iOS): iOSでは、検証により、Google Client IDに特定されたトークンが発行されたことを確認し、他のアプリケーション用に意図されたトークンを使用する可能性のある潜在的なセキュリティ問題を防止します。
-
Better Error Handling: Supabaseに送る前にトークンを検証することで、iOSのキャッシュ問題を透明に自動リトライロジックを実行することができます。
If validation fails, the function automatically:
- Googleからログアウト (キャッシュされたトークンをクリア - iOSでは重要)
- 再度の認証を1回実行 (正しいnonceで新しいトークンを生成)
- リトライも失敗した場合、エラーを返す
4. Supabase Sign-In
「4. Supabase Sign-In」のセクション最後に、検証済みのトークンがSupabaseに送信されます:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Codeの完全なリファレンス
Codeの完全なリファレンスのセクション完全な実装は、 例のアプリの supabaseAuthUtils.ts ファイルにあります。これには含まれています。
getUrlSafeNonce()- URL安全のランダムなnonceを生成するsha256Hash()- SHA-256で文字列をハッシュするgetNonce()- nonce pairを生成するdecodeJWT()- JWTトークンをデコードするvalidateJWTToken()- JWTの受信者とnonceを検証するauthenticateWithGoogleSupabase()- 自動リトライを含む主な認証関数
追加の例ファイル
追加の例ファイルのセクション- SupabasePage.tsx - Web へのリダイレクトハンドリングを含む例のコンポーネント
- SupabaseCreateAccountPage.tsx - アカウント作成ページの例
次のステップ
次のステップのセクションこのターゲットプラットフォームのプラットフォーム固有のセットアップガイドに進んでください:
Supabase Google Login - General Setup から続けてください
「Supabase Google Login - General Setup から続けてください」あなたが Supabase Google Login - General Setup を使用して認証とアカウントフローの計画を行っている場合、 Using @capgo/capacitor-social-login for the native capability in Using @capgo/capacitor-social-login, Using @capgo/capacitor-social-login を使用して、Using @capgo/capacitor-social-login のネイティブ機能を実装してください Using @capgo/capacitor-social-login を使用して、@capgo/capacitor-social-login の実装詳細を確認してください Using @capgo/capacitor-passkey 実装詳細については @capgo/capacitor-native-biometric に記載されています。 2要素認証 実装詳細については 2要素認証 に記載されています。