Zum Inhalt springen

Supabase Google-Login auf iOS

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

Die vollständige Implementierung ist in den Beispiel-App supabaseAuthUtils.ts Dieses Handbuch erklärt die wichtigsten Konzepte und wie man es verwendet.

Der authenticateWithGoogleSupabase Funktion handhabt den gesamten Authentifizierungsfluss:

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, wie der Authentifizierungsfluss funktioniert, einschließlich der Nonce-Generierung, der JWT-Validierung und der Supabase-Anmeldung, siehe den Wie es funktioniert Abschnitt im General Setup-Leitfaden.

Wichtige Hinweise

Wichtige Hinweise

iOS-Token-Caching- und Nonce-Probleme

iOS-Token-Caching- und Nonce-Probleme

iOS-Nonce-Caching-Problem

Bei iOS kann Google Sign-In-Tokens im Cache speichern, was möglicherweise die Nonce-Validierung verhindert. 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, wird automatisch aus Google abgemeldet und einmal wiederholt
  3. Fehlerbehandlung: Wenn auch die Wiederholung fehlschlägt, wird ein Fehler zurückgegeben

Warum das passiert: iOS Google Sign-In SDK speichert Tokens zum Leistungszweck. Wenn ein gecachter Token zurückgegeben wird, kann es mit einem anderen (oder keinem) Nonce generiert worden sein, was zu einem Mangel an Übereinstimmung 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.

Manuelle Umgehung (wenn automatische Wiederholung nicht funktioniert):

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

Dies sichert ein frisches Token mit dem richtigen Nonce.

Für die vollständige code-Dokumentation siehe den Vollständigen Code-Bezug in der General Setup-Anleitung.

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

  • rawNonce geht zu Supabase’s 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-kodiert) geht zum nonce Parameter in den Google Sign-In-APIs

Automatischer Wiederholungsmechanismus

Abschnitt: "Automatischer Wiederholungsmechanismus"

Die authenticateWithGoogleSupabase Funktion enthält einen retry Parameter:

  • Erste Anfrage (retry=false): Wenn die Validierung fehlschlägt, wird automatisch abgemeldet und einmal wiederholt
  • Wiederholungsanfrage (retry=true): Wenn 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-Mismatch: Die Funktion wiederholt sich automatisch - überprüfen Sie die Konsole für Details. Wenn es anhält, loggen Sie sich manuell aus.
  • Ungültige Zielgruppe: Überprüfen Sie, ob Ihre Google-Kunden IDs in beiden Google Cloud Console und Supabase (beide iOS- und Webclient-IDs) übereinstimmen.
  • Fehler bei der Token-Validierung: Stellen Sie sicher, dass Sie mode: 'online' in der Initialisierungsrufe get an idToken
  • Info.plist-Konfiguration: Stellen Sie sicher, dass Info.plist die richtigen URL-Schemata und GIDClientID enthält.
  • Überprüfen Sie das Beispiel-App code zur Referenz