Supabase Google Login - General Setup
このプラグインのセットアッププロンプトをコピーして、インストール手順とフルマークダウンガイドを取得します。
このガイドでは、Capacitor Social Login プラグインを使用して、Google Sign-InとSupabase Authenticationを統合する方法を説明します。このセットアップでは、モバイルプラットフォームでネイティブのGoogle Sign-Inを使用しながら、バックエンドの認証にSupabase Authを活用できます。
__CAPGO_KEEP_0__を開始する前に、以下のことを確認してください:
-
を読んでください Googleログインの一般的なセットアップ Google OAuthのクレデンシャルをセットアップするためのガイドを読んでください
-
Google OAuthのクレデンシャルをセットアップするためのプラットフォーム固有のガイドを読んでください:
Google OAuth プロバイダーを Supabase に有効にする
タイトル: Google OAuth プロバイダーを Supabase に有効にする-
あなたの Supabase ダッシュボード
-
あなたのプロジェクトを
-
プロバイダーを有効にするには、
Authenticationメニュー
-
プロバイダーを有効にする
Providersタブ
-
Find the
Googleprovider
-
Enable the provider
-
Add the client IDs for the platforms you plan to use
-
Click on the
Savebutton
GoogleサインインとSupabase認証ヘルパーのしくみ
GoogleサインインとSupabase認証ヘルパーのしくみ
Section titled “How Google Sign-In with Supabase Authentication Helper Works”このセクションでは、Google Sign-InとSupabaseの統合の内部動作について説明します。 このフローを理解することで、認証プロセスの実装とトラブルシューティングを支援できます。
1. Nonce Generation
セクション「1. Nonce Generation」実装では、Supabase 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 };}__CAPGO_KEEP_0__
rawNonce: __CAPGO_KEEP_0__ (64バイトの16進数文字列)nonceDigest: __CAPGO_KEEP_0__ のSHA-256ハッシュrawNonce(16進数エンコード)nonceDigestGoogle Sign-In への nonce のダイジェストが含まれるIDトークンをGoogleが生成するrawNonceSupabase への nonce のハッシュが生成され、トークン内の 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 などのプラットフォーム (特に iOS) で、Google Sign-In SDK がパフォーマンスのためにトークンをキャッシュすることがあります。キャッシュされたトークンが返される場合、キャッシュされたトークンは、異なる nonce (または nonce がない場合) で生成された可能性があり、Supabase によってトークンが
-
nonce の一致エラー で拒否される可能性があります。Supabase へのトークンを送る前に検証することで、早期にこの問題を検出し、自動的にリトライして新しいトークンを取得できます。
-
セキュリティ(iOS): iOS の場合、検証により、トークンがあなたの特定の Google Client ID に発行されたことを確認できます。これにより、他のアプリケーションに使用されるトークンによる潜在的なセキュリティ問題を防ぐことができます。
エラー処理の向上、":検証が失敗した場合、関数は自動的に:
- Google からログアウト (キャッシュされたトークンをクリア - iOS では重要)
- 再試行 (正しい 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});「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 を使用して認証とアカウントフローの計画を行っている場合、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-social-login と接続してください。 Using @capgo/capacitor-social-login native機能の使用方法については、@capgo/capacitor-social-loginを参照してください。 @capgo/capacitor-social-login @capgo/capacitor-social-loginの実装方法については、@capgo/capacitor-social-loginを参照してください。 @capgo/capacitor-passkey @capgo/capacitor-passkeyの実装方法については、@capgo/capacitor-passkeyを参照してください。 @capgo/capacitor-native-biometric @capgo/capacitor-native-biometricの実装方法については、@capgo/capacitor-native-biometricを参照してください。 2要素認証 2要素認証の実装方法については、2要素認証を参照してください。