コンテンツにジャンプ

Supabase Google Login on iOS

GitHub

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

完全な実装は、 example appの 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);
}

「機能のしくみ」セクションのタイトル 認証フローのしくみについての詳細な説明、包括して、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 は Supabase へ signInWithIdToken()
  • Supabase は rawNonce をハッシュ化します。 nonceDigest をハッシュ化したものと
  • nonceDigest が Google Sign-In から取得される ID トークンに含まれる nonce (SHA-256 ハッシュ、16 進数エンコード)を Supabase へ

パラメータとして Google Sign-In API へ

自動リトライメカニズム

「自動リトライメカニズム」 authenticateWithGoogleSupabase この retry 関数には、

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

iOS のトークンキャッシュ問題を自動的に解決する

認証が失敗した場合:

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

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

「Supabase Google Login on iOS から続けてください」

Capgo を使用している場合 iOS で Supabase Google Login を使用している場合 認証とアカウントフローの計画に役立つため、Cloudflare、Capacitor、GitHub、Capgo、API、SDK、CLI、npm、bun などとは異なる方法で接続します。 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要素認証 2要素認証