Supabase Google-Login auf iOS
Eine Einrichtungsvorlage mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin kopieren.
Einführung
Abschnitt mit dem Titel „Einführung“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:
Implementierung
Abschnitt mit dem Titel „Implementierung“Die vollständige Implementierung ist in den Beispiel-App supabaseAuthUtils.ts Dieses Handbuch erklärt die wichtigsten Konzepte und wie man es verwendet.
Mit dem Authentifizierungs-Helfer
Abschnitt mit dem Titel „Mit dem Authentifizungs-Helfer“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);}Wie es funktioniert
Abschnitt mit dem Titel „Wie es funktioniert“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 HinweiseiOS-Token-Caching- und Nonce-Probleme
iOS-Token-Caching- und Nonce-ProblemeiOS-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:
- Automatische Erkennung: Die Funktion überprüft, ob der in dem Token enthaltene Nonce mit dem erwarteten
nonceDigest - Automatische Wiederholung: Wenn die Validierung fehlschlägt, wird automatisch aus Google abgemeldet und einmal wiederholt
- 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 tokensawait SocialLogin.logout({ provider: 'google' });
// Then authenticateconst 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.
Wichtige Hinweise
Abschnitt mit dem Titel „Wichtige Hinweise“Nonce-Handling
Abschnitt: "Nonce-Handling"Die Nonce-Implementierung folgt dem Muster aus der React Native Google Sign In-Dokumentation:
rawNoncegeht zu Supabase’ssignInWithIdToken()- Supabase erstellt einen Hash von
rawNonceund vergleicht ihn mit demnonceDigestder im ID-Token von Google Sign-In enthalten ist nonceDigest(SHA-256-Hash, hex-kodiert) geht zumnonceParameter 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.
Fehlersuche
Abschnitt mit dem Titel “Fehlersuche”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