iOS上のSupabase Googleログイン
__CAPGO_KEEP_0__のインストール手順とフルマークダウンガイドを含む設定用の質問をコピーします。
このガイドでは、iOSでGoogle Sign-InとSupabase Authenticationを統合する方法を説明します。以下のステップをすでに完了していることを前提としています。
- Google Login iOSの設定 Supabase Google Login - General Setup
- 実装 「実装」のタイトルが付いたセクション.
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__完全な実装は、 例のアプリの supabaseAuthUtils.ts ファイルにあります。このガイドでは、主な概念とその使用方法について説明します。
認証ヘルパーを使用する
「認証ヘルパーを使用する」のセクションの 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);}How It Works
セクション「How It Works」認証フローの詳細な説明については、nonce の生成、JWT の検証、Supabase のサインインなど、General Setup ガイドの「How It Works」セクションを参照してください。 Copy to clipboard.
注意事項
重要な注意事項iOS Token キャッシュと Nonce 問題
iOS Token キャッシュと Nonce 問題iOS Nonce キャッシュ問題
iOS では、Google Sign-In はトークンをキャッシュすることができます。これにより、nonce の検証が失敗する可能性があります。この validateJWTToken 機能はこれを検出して自動的に処理します:
- 自動検出:機能は、トークン内の nonce が期待どおりであるかどうかを確認します。
nonceDigest - 自動リトライ:検証が失敗した場合、機能は Google からログアウトし、1 回リトライします。
- エラーハンドリング: 再試行も失敗した場合、エラーが返されます
なぜこれが起こるか: iOS Google Sign-In SDK はパフォーマンスのためにトークンをキャッシュします。キャッシュされたトークンが返された場合、それが生成されたnonce (またはnonceが存在しない場合) が異なる可能性があり、不一致が発生する可能性があります。
解決策: この実装は自動的にログアウトして再試行することで、この問題を解決します。これにより、Google は正しいnonce で新しいトークンを生成することを強制します。
手動の回避策 (自動的な再試行が機能しない場合):
// Logout first to clear cached tokensawait SocialLogin.logout({ provider: 'google' });
// Then authenticateconst result = await authenticateWithGoogleSupabase();これにより、正しいnonce で新しいトークンが取得されることを保証します。
完全な code のリファレンスについては、 General Setup のガイドの Complete Code Reference セクションを参照してください.
重要な注意事項
重要な注意事項Nonce の処理
Nonce の処理__CAPGO_KEEP_0__ のパターンに従って nonce の実装を行っています。 React Native Google Sign In ドキュメントのパターンに従って nonce の実装を行っています。:
rawNonceSupabase へsignInWithIdToken()- Supabase は、__CAPGO_KEEP_0__ を生成します。
rawNonceと比較します。nonceDigestGoogle Sign-In から取得した ID トークンに含まれる __CAPGO_KEEP_0__ と比較します。 nonceDigest(SHA-256 ハッシュ、16 進数エンコード) を Google Sign-In API の __CAPGO_KEEP_0__ に送信します。nonce自動リトライ機構
__CAPGO_KEEP_0__
自動リトライメカニズムこの authenticateWithGoogleSupabase 関数にはパラメータが含まれています: retry 最初の呼び出し (
- ): 認証が失敗した場合、自動的にログアウトし、再試行します。
retry=false再試行呼び出し ( - ): 認証が失敗した場合、直ちにエラーを返します。
retry=trueiOSのトークンキャッシュ問題を自動的に解決します。
トラブルシューティング
セクションのタイトル “トラブルシューティング”
認証が失敗した場合:最初の呼び出し (
- 非同期エラー: 再試行が自動的に行われます。詳細はコンソールログを確認してください。問題が続く場合は、手動でログアウトしてください。
- 無効な受信者: Google Client ID が Google Cloud Console と Supabase (両方の iOS と Web クライアント ID) に一致していることを確認してください。
- トークン検証失敗: initialize 関数の get an idToken の呼び出しで
mode: 'online'Info.plist 設定 - : Info.plist に正しい URL スキームと GIDClientID が含まれていることを確認してください。参考用の例アプリ
- はこちらを参照してください。 example app code __CAPGO_KEEP_0__