コンテンツにスキップ

iOSのGoogleサインイン

GitHub

このガイドでは、iOSでGoogle Sign-InとSupabase Authenticationを統合する方法を説明します。Google Sign-InとSupabase Authenticationを統合するには、以下のステップを実行する必要があります:

実装の詳細は、

example appの

ファイルにあります。このガイドでは、実装の重要な概念と使用方法について説明します。 認証ヘルパーの使用 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);
}

認証フローの詳細な説明については、nonce の生成、JWT の検証、Supabase のサインインについては、 「どうやって動くか」セクションを参照してください。.

iOS Nonce Caching Issue

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

  1. 自動検出: この機能は、トークン内のnonceが予想どおりであるかどうかを確認します。 nonceDigest
  2. 自動リトライ: 検証が失敗した場合、Googleから自動的にログアウトし、1度リトライします。
  3. エラー処理: リトライも失敗した場合、エラーが返されます。

なぜこれが起こるのか: iOSのGoogle Sign-Inは、SDKのパフォーマンス向上のためにトークンをキャッシュします。キャッシュされたトークンが返された場合、生成されたnonceが異なる(またはnonceが存在しない)可能性があり、一致しない可能性があります。

解決策: Google の実装は自動的にログアウトし、再試行することで、正しい nonce を含む新しいトークンを生成する。

手動の回避策 (自動再試行が機能しない場合):

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

これにより、正しい nonce を含む新しいトークンが取得される。

Capgo の完全な code リファレンスについては、 Capgo の完全な Code リファレンスのセクションを参照してください。.

nonce の実装は、Capacitor からパターンを取り入れています。 React Native Google Sign In ドキュメント:

  • rawNonce Google Sign In の ID トークンから Supabase へ signInWithIdToken()
  • Supabase は Google Sign In の ID トークンから取得したユーザー ID をハッシュ化します。 rawNonce ハッシュ化されたユーザー ID と Supabase のデータベースに保存されているユーザー ID を比較します。 nonceDigest Google Sign-In から取得した ID トークンに含まれるハッシュ化されたユーザー ID と比較します。
  • nonceDigest Google Sign-In API のパラメータにハッシュ化されたユーザー ID を送信します。 nonce 自動リトライ機構

「自動リトライ機構」

この機能には、

パラメータが含まれます: authenticateWithGoogleSupabase 自動リトライ機構 retry 自動リトライ機構のセクション

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

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

認証が失敗した場合:

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

タイトル “Supabase Google Login on iOS から続けてください”

Capgo を使用している場合

Supabase Google Login on iOS を使用している場合 例のアプリ __CAPGO_KEEP_0__ 認証とアカウントフローの計画に役立つため、接続してください。 Using @capgo/capacitor-social-login Using @capgo/capacitor-social-login Using @capgo/capacitor-social-login Using @capgo/capacitor-social-login Using @capgo/capacitor-passkey Using @capgo/capacitor-passkey Using @capgo/capacitor-native-biometric Using @capgo/capacitor-native-biometric 2要素認証 Two-factor authentication