コンテンツにスキップ

iOS上のSupabase Googleログイン

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

__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);
}

認証フローの詳細な説明については、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 機能はこれを検出して自動的に処理します:

  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 で新しいトークンが取得されることを保証します。

完全な code のリファレンスについては、 General Setup のガイドの Complete Code Reference セクションを参照してください.

重要な注意事項

重要な注意事項

Nonce の処理

Nonce の処理

__CAPGO_KEEP_0__ のパターンに従って nonce の実装を行っています。 React Native Google Sign In ドキュメントのパターンに従って nonce の実装を行っています。:

  • rawNonce Supabase へ signInWithIdToken()
  • Supabase は、__CAPGO_KEEP_0__ を生成します。 rawNonce と比較します。 nonceDigest Google Sign-In から取得した ID トークンに含まれる __CAPGO_KEEP_0__ と比較します。
  • nonceDigest (SHA-256 ハッシュ、16 進数エンコード) を Google Sign-In API の __CAPGO_KEEP_0__ に送信します。 nonce 自動リトライ機構

この 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__