Supabase Google Login - Allgemeine Einrichtung
Einen Setup-Vorschlag mit den Installationsanweisungen und der vollständigen Markdown-Anleitung für diesen Plugin erstellen.
Einführung
Abschnitt mit dem Titel „Einführung“Diese Anleitung führt Sie durch die Integration von Google Sign-In mit Supabase-Authentifizierung mithilfe des Capacitor-Social-Login-Plugins. Diese Konfiguration ermöglicht die Verwendung von native Google Sign-In auf mobilen Plattformen, während Supabase Auth für die Backend-Authentifizierung genutzt wird.
Voraussetzungen
Abschnitt mit dem Titel „Voraussetzungen“Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
-
Die Google Login Allgemeine Einrichtung Anleitung zur Einrichtung von Google OAuth-Zugriffsberechtigungen gelesen haben
-
Die jeweiligen plattform-spezifischen Anleitungen zur Einrichtung von Google OAuth-Zugriffsberechtigungen für Ihre Zielplattform befolgt haben:
Google OAuth-Anbieter in Supabase aktivieren
Abschnitt "Google OAuth-Anbieter in Supabase aktivieren"-
Gehe zu deinem Supabase-Dashboard
-
Klicke auf deinen Projekt
-
Gehe zum
AuthenticationMenü
-
Klicke auf die
ProvidersRegisterkarte
-
Find the
GoogleAnbieter
-
Der Anbieter aktivieren
-
Fügen Sie die Client-IDs für die Plattformen hinzu, die Sie verwenden möchten
-
Klicken Sie auf den
SaveSchaltfläche
Voilà, du hast nun Google-Anmelden mit Supabase-Authentifizierung aktiviert 🎉
Wie Google-Anmelden mit Supabase-Authentifizierung-Helfer funktioniert
Abschnitt mit dem Titel „Wie Google-Anmelden mit Supabase-Authentifizierung-Helfer funktioniert“Diese Abschnitt erklärt, wie die Google-Anmeldung mit Supabase unter der Haube funktioniert. Durch das Verständnis dieses Flusses können Sie die Authentifizierungsprozess implementieren und Fehler beheben.
1. Nonce-Generation
Abschnitt mit dem Titel „1. Nonce-Generation“Die Implementierung generiert ein sicheres Nonce-Paar, das den Anforderungen von Supabase entspricht Zu Clipboard kopieren:
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Generate nonce pairasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}Fluss: __CAPGO_KEEP_0__
rawNonce: URL-sichere zufällige Zeichenkette (64 hex Zeichen)nonceDigest: SHA-256-Hash von __CAPGO_KEEP_0__rawNonce(hex-kodiert)nonceDigestwird an Google Sign-In übergeben → Google enthält den Digest des Nonces im ID-TokenrawNoncewird an Supabase übergeben → Supabase hashet die Roh-Nonce und vergleicht sie mit dem Token-Nonce
2. Google Sign-In
Abschnitt mit dem Titel „2. Google Sign-In“Die Funktion initialisiert das Plugin und meldet sich bei Google an:
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. JWT-Validierung
Abschnitt mit dem Titel „3. JWT-Validierung“Bevor der Token an Supabase gesendet wird, validiert die Implementierung den JWT-Token:
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}Warum vor Supabase validieren?
Das Validieren des JWT-Tokens vor der Übermittlung des Tokens an Supabase dient mehreren wichtigen Zwecken:
-
Verhindern Sie ungültige Anforderungen: Wenn das Token eine falsche Zielgruppe oder eine Nichtübereinstimmung der Nonce hat, wird Supabase das Token ohnehin ablehnen. Das Validieren vorher vermeidet unnötige API-Aufrufe und liefert klare Fehlermeldungen.
-
Token-Caching-Probleme: Auf einigen Plattformen (insbesondere iOS) kann Google Sign-In SDK Tokens zum Zweck der Leistungsoptimierung im Cache speichern. Wenn ein im Cache gespeichertes Token zurückgegeben wird, kann das im Cache gespeicherte Token möglicherweise mit einer anderen Nonce (oder ohne Nonce) generiert worden sein, wodurch Supabase das Token mit einem "Nichtübereinstimmung der Nonce"-Fehler ablehnt. Durch das Validieren vor der Übermittlung an Supabase können wir dieses Problem frühzeitig erkennen und automatisch mit einem frischen Token erneut versuchen.
-
Sicherheit (iOS): Auf iOS stellt die Validierung sicher, dass das Token für Ihre spezifischen Google-Kunden-IDs ausgestellt wurde, wodurch potenzielle Sicherheitsprobleme von der Verwendung von Tokens für andere Anwendungen verhindert werden.
-
Bessere Fehlerbehandlung: Die Erkennung von Problemen vor Supabase ermöglicht automatische Wiederholungslogik, die für die transparente Behandlung von iOS-Caching-Problemen unerlässlich ist.
Wenn die Validierung fehlschlägt, führt die Funktion automatisch:
- Ausloggen von Google (löscht gespeicherte Tokens - kritisch auf iOS)
- Authentifizierung einmal wiederholt (zwangsvolliger Token-Neuerzeugung mit korrektem Nonce)
- Wenn auch der Wiederholungsversuch fehlschlägt, wird ein Fehler zurückgegeben
4. Supabase-Anmeldung
Abschnitt mit dem Titel „4. Supabase-Anmeldung“Schließlich wird der validierte Token an Supabase gesendet:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Komplette Code-Referenz
Abschnitt mit dem Titel „Komplette Code-Referenz“Die vollständige Implementierung ist im Beispiel-App-Datei supabaseAuthUtils.ts verfügbar, die Folgendes enthält:
getUrlSafeNonce()- Generiert eine URL-sichere zufällige Noncesha256Hash()- Hashes eine Zeichenkette mit SHA-256getNonce()- Generiert eine Nonce-PaardecodeJWT()- Entschlüsselt JWT-TokenvalidateJWTToken()- Überprüft JWT-Zielgruppe und NonceauthenticateWithGoogleSupabase()- Hauptauthentifizierungs-Funktion mit automatischer Wiederholung
Zusätzliche Beispieldateien
Abschnitt mit dem Titel „Zusätzliche Beispieldateien“- SupabasePage.tsx - Beispielkomponente mit Redirect-Handling (Web)
- SupabaseCreateAccountPage.tsx - Beispiel-Anmeldeseite für Erstellung eines Kontos
Weiterführende Schritte
Abschnitt mit dem Titel “Weiterführende Schritte”Bitte gehen Sie zur plattform-spezifischen Einrichtungsanleitung für Ihre Zielplattform:
Weitermachen von Supabase Google Login - Allgemeine Einrichtung
Abschnitt mit dem Titel “Weitermachen von Supabase Google Login - Allgemeine Einrichtung”Wenn Sie " Supabase Google Login - Allgemeine Einrichtung " verwenden, um die Authentifizierung und die Kontoflows zu planen, verbinden Sie es mit Mit @capgo/capacitor-social-login für die native Fähigkeit in @capgo/capacitor-social-login, @capgo/capacitor-social-login für die Implementierungsdetails in @capgo/capacitor-social-login, @capgo/capacitor-passkey für die Implementierungsdetails in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric für die Implementierungsdetails in @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetails in Zwei-Faktor-Authentifizierung.