Zum Inhalt springen

Supabase Google Login auf iOS

GitHub

Diese Anleitung hilft Ihnen, Google Sign-In mit Supabase-Authentifizierung auf iOS zu integrieren. Es wird angenommen, dass Sie bereits folgende Schritte abgeschlossen haben:

Die vollständige Implementierung ist im Beispiel-Apps supabaseAuthUtils.ts Datei verfügbar. Diese Anleitung erklärt die wichtigsten Konzepte und wie Sie sie verwenden können.

Der authenticateWithGoogleSupabase Funktion

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

Für eine detaillierte Erklärung der Authentifizierungsablauf, einschließlich der Nonce-Generierung, der JWT-Validierung und der Supabase-Anmeldung, siehe den Abschnitt Wie es funktioniert im General Setup-Leitfaden.

iOS-Nonce-Caching-Probleme

Bei iOS kann Google Sign-In-Tokens cachen, was möglicherweise dazu führt, dass die Nonce-Validierung fehlschlägt. Die validateJWTToken Funktion erkennt dies und handhabt es automatisch:

  1. Automatische Erkennung: Die Funktion überprüft, ob der in dem Token enthaltene Nonce mit dem erwarteten nonceDigest
  2. Automatische Wiederholung: Wenn die Validierung fehlschlägt, loggt sich automatisch aus bei Google und wiederholt dies einmal
  3. Fehlerbehandlung: Wenn auch die Wiederholung fehlschlägt, wird ein Fehler zurückgegeben

Warum das passiert: iOS Google Sign-In SDK cacht Tokens zum Leistungsverbesserungszweck. Wenn ein gecachter Token zurückgegeben wird, kann es möglicherweise mit einem anderen (oder keinem) Nonce generiert worden sein, was zu einem Mismatch führt.

Die Lösung: Die Implementierung handhabt dies automatisch, indem sie sich abmeldet und erneut versucht, was dazu führt, dass Google einen frischen Token mit dem richtigen Nonce generiert.

Manueller Workaround (wenn die automatische Wiederholung nicht funktioniert):

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

Damit wird sichergestellt, dass ein frischer Token mit dem richtigen Nonce erhalten wird.

Für die vollständige code-Referenz siehe den Vollständige Code-Referenzabschnitt im General Setup-Leitfaden.

Die Nonce-Implementierung folgt dem Muster aus dem React Native Google Sign In Dokumentation:

  • rawNonce geht zu Supabases’ signInWithIdToken()
  • Supabase erstellt einen Hash von rawNonce und vergleicht ihn mit dem nonceDigest der im ID-Token von Google Sign-In enthalten ist
  • nonceDigest (SHA-256-Hash, hex-gekodiert) geht zum nonce Parameter in den Google Sign-In-APIs

Die authenticateWithGoogleSupabase Funktion enthält einen retry Parameter:

  • Erste Anruf (retry=falseWenn die Validierung fehlschlägt, wird automatisch abgemeldet und einmal wiederholt
  • Wiederholter Anruf (retry=trueWenn die Validierung erneut fehlschlägt, wird sofort ein Fehler zurückgegeben

Dies löst das iOS-Token-Caching-Problem automatisch

Wenn die Authentifizierung fehlschlägt:

  • Nonce-MismatchDie Funktion wiederholt sich automatisch – überprüfe die Konsole für Details. Wenn es anhält, melde dich manuell ab zuerst
  • Ungültige ZielgruppeÜberprüfe, ob deine Google-Kunden IDs in beiden Google Cloud Console und Supabase (beide iOS- und Webclient-IDs) übereinstimmen
  • Tokenvalidierung fehlschlägt: Stellen Sie sicher, dass Sie mode: 'online' in der Initialisierungsrufe, um einen idToken zu erhalten
  • Info.plist-Konfiguration: Stellen Sie sicher, dass Info.plist die richtigen URL-Schemes und GIDClientID enthält
  • Überprüfen Sie das Beispiel-App code zur Referenz

Wenn Sie Supabase Google Login auf iOS verwenden Wenn Sie Supabase Google Login auf iOS verwenden um die Authentifizierung und die Kontenflüsse zu planen, verbinden Sie es mit Verwenden Sie @capgo/capacitor-social-login für die native Fähigkeit in Verwenden Sie @capgo/capacitor-social-login, @capgo/capacitor-social-login für die Implementierungsdetail in @capgo/capacitor-social-login, @capgo/capacitor-passkey für die Implementierungsdetail in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric für die Implementierungsdetail in @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetail in Zwei-Faktor-Authentifizierung.