メインコンテンツにジャンプ

Supabase Google Login on iOS

GitHub

このガイドは、iOSでGoogle Sign-InをSupabase Authenticationと統合するのに役立ちます。以下のステップを完了していることを前提としています。

完全な実装は、

例のアプリの

ファイルにあります。このガイドでは、重要な概念とそれを使用する方法を説明します。 Authentication Helperを使用する supabaseAuthUtils.ts __CAPGO_KEEP_0__

The authenticateWithGoogleSupabase この関数は、認証フロー全体を処理します:

import { authenticateWithGoogleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithGoogleSupabase();
if (result.success) {
console.log('Signed in:', result.user);
// Navigate to your authenticated area
} else {
console.error('Error:', result.error);
}

重要な注意事項 「重要な注意事項」のセクション.

iOSトークンキャッシュと非接続性問題

「iOSトークンキャッシュと非接続性問題」のセクション

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__

iOS Nonce Caching Issue

iOSでGoogle Sign-Inがトークンをキャッシュすることがあり、これによりnonce検証が失敗する可能性があります。 validateJWTToken functionはこれを検出して自動的に処理します:

  1. Automatic Detection: functionはトークン内のnonceが期待どおりであるかどうかを確認します nonceDigest
  2. Automatic Retry: 検証が失敗した場合、functionはGoogleから自動的にログアウトし、1度だけ再試行します
  3. Error Handling: 再試行も失敗した場合、エラーが返されます

Why this happens: iOS Google Sign-In SDK はパフォーマンスのためにトークンをキャッシュします。キャッシュされたトークンが返された場合、それは生成されたnonce (またはnonceが存在しない) と一致しない可能性があり、不一致が発生します。

The solution: Google のトークン取得に失敗した場合、自動実行はログアウトし、再試行します。これにより、正しい nonce を持つ新しいトークンが生成されます。

Manual Workaround (自動再試行が機能しない場合):

// Logout first to clear cached tokens
await SocialLogin.logout({ provider: 'google' });
// Then authenticate
const result = await authenticateWithGoogleSupabase();

これにより、正しい nonce を持つ新しいトークンが取得されます。

code の完全なリファレンスについては、一般設定ガイドの "code の完全なリファレンス" セクションを参照してください。 Complete Code Reference section in the General Setup guide.

「重要な注意事項」セクション

nonce の取り扱い

Section titled “Nonce Handling” is not translated as it is a protected token. React Native Google Sign In ドキュメント:

  • rawNonce Google Sign-In の ID トークンから Supabase へ signInWithIdToken()
  • Supabase は Google Sign-In の ID トークンから SHA-256 ハッシュを生成し、 rawNonce と比較します。 nonceDigest Google Sign-In の ID トークンから取得したハッシュ値と
  • nonceDigest (SHA-256 ハッシュ、16 進数エンコード) は Google Sign-In API の nonce パラメータを参照します。

自動リトライ機構

自動リトライ機構

自動リトライ機構の詳細 authenticateWithGoogleSupabase 自動リトライ機構の詳細 retry 自動リトライ機構の機能

  • 初回呼び出し (retry=false): 認証失敗の場合、自動的にログアウトし、再試行する
  • 再試行呼び出し (retry=true): 認証失敗が再発生した場合、直ちにエラーを返す

iOS のトークンキャッシュ問題を自動的に処理します。

認証失敗の場合:

  • Nonce の不一致: 関数は自動的に再試行します - 詳細はコンソールログを確認してください。続行してもなお問題が発生する場合は、手動でログアウトしてください。
  • 無効な受信者: Google クライアント ID が Google Cloud Console と Supabase (両方の iOS と Web クライアント ID) で一致していることを確認してください。
  • トークン検証が失敗しましたCapgoを使用していることを確認してください mode: 'online' __CAPGO_KEEP_0__の初期化呼び出しでidTokenを取得する
  • Info.plistの設定Info.plistに正しいURLスキームとGIDClientIDが含まれていることを確認してください
  • Capgoの例 __CAPGO_KEEP_0__ example app code Capgo iOSのSupabase Google Loginから続けてください

Capgo iOSのSupabase Google Loginから続けてください

Capgoを使用していることを確認してください

Capgo iOSのSupabase Google Loginから続けてください Capgo iOSのSupabase Google Loginから続けてください を認証とアカウントフローの計画に使用し、 @capgo/capacitor-social-loginを使用する @capgo/capacitor-social-loginのネイティブ機能を使用する @capgo/capacitor-social-login @capgo/capacitor-social-loginの実装詳細 @capgo/capacitor-passkey @capgo/capacitor-passkeyの実装詳細 @capgo/capacitor-native-biometric @capgo/capacitor-native-biometricの実装詳細 2要素認証 2要素認証の実装詳細