Supabase Google-Anmeldung - Allgemeine Einrichtung
Kopieren Sie einen Einrichtungsprompt mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin.
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 Einstellungen Anleitung zur Einrichtung von Google OAuth-Zugriffsberechtigungen
-
Folgen Sie den jeweils plattform-spezifischen Anleitungen, um die Google OAuth-Zugriffsberechtigungen für Ihre Zielplattform einzurichten:
Aktivieren von Google OAuth-Anbieter in Supabase
Abschnitt mit dem Titel „Aktivieren von Google OAuth-Anbieter in Supabase“-
Gehe zu Ihrem Supabase Dashboard
-
Klicken Sie auf Ihr Projekt
-
Geht es nicht zum
AuthenticationMenü
-
Klicken Sie auf die
ProvidersRegisterkarte
-
Finden Sie den
GoogleAnbieter
-
Aktivieren Sie den Anbieter
-
Fügen Sie die Client-IDs für die Plattformen hinzu, die Sie verwenden möchten
-
Klicken Sie auf den
SaveSchaltfläche
Voilà, Sie haben nun Google Sign-In mit Supabase-Authentifizierung aktiviert 🎉
Wie Google Sign-In mit Supabase-Authentifizierung-Helfer funktioniert
Abschnitt mit dem Titel „Wie Google Sign-In mit Supabase-Authentifizierung-Helfer funktioniert“In diesem Abschnitt wird erklärt, wie die Google-Sign-In-Integration mit Supabase unter der Haube funktioniert. Ein Verständnis dieses Flusses hilft Ihnen dabei, die Authentifizierungsprozess zu implementieren und zu überprüfen.
1. Nonzengenerierung
Abschnitt mit dem Titel „1. Nonzengenerierung“Die Implementierung generiert ein sicheres Nonce-Paar, das den Supabase-Nonce-Anforderungen entspricht:
// 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:
rawNonceURL-sichere zufällige Zeichenfolge (64 hexadezimale Zeichen)nonceDigestSHA-256-Hash vonrawNonce(hexadezimale Kodierung)nonceDigestwird an Google Sign-In weitergeleitet → Google enthält den Digest des Nonces im ID-TokenrawNoncewird an Supabase weitergeleitet → Supabase hashet den Roh-Nonce und vergleicht ihn mit dem Nonce des Tokens
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?
Die Validierung des JWT-Tokens vor dem Senden des Tokens an Supabase dient mehreren wichtigen Zwecken:
-
Verhindere ungültige Anfragen: Wenn der Token eine falsche Zielgruppe oder ein Nichtübereinstimmung von Nichtzahlen hat, wird Supabase den Token ohnehin ablehnen. Die Überprüfung zuerst vermeidet unnötige API Aufrufe und liefert klare Fehlermeldungen.
-
Token-Caching-Probleme: Auf bestimmten Plattformen (insbesondere iOS), kann Google Sign-In SDK Token für Leistungszwecke im Cache speichern. Wenn ein gecachter Token zurückgegeben wird, kann der gecachte Token möglicherweise mit einer anderen Nichtzahl (oder ohne Nichtzahl) generiert worden sein, was zu einem Fehler mit der Meldung „Nichtübereinstimmung von Nichtzahlen“ durch Supabase führt. Durch die Überprüfung vor dem Senden an Supabase können wir dieses Problem frühzeitig erkennen und automatisch mit einem frischen Token erneut versuchen.
-
Sicherheit (iOS): Die Überprüfung stellt sicher, dass der Token für Ihre spezifischen Google Client IDs ausgestellt wurde, was potenzielle Sicherheitsprobleme von der Verwendung von Tokens für andere Anwendungen verhindert.
-
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 Überprüfung fehlschlägt, führt die Funktion automatisch:
- Abmeldung von Google (Löschen der gecachten Tokens - kritisch auf iOS)
- Wiederholte Authentifizierung einmal (Zwingt eine frische Token-Generierung mit korrekter Nichtzahl)
- Wenn auch die Wiederholung 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});Vollständige Code-Referenz
Abschnitt mit dem Titel “Vollständige Code-Referenz”Die vollständige Implementierung ist im Beispiel-App-Datei supabaseAuthUtils.ts verfügbar, die folgende Funktionen enthält:
getUrlSafeNonce()- Generiert URL-sichere zufällige Noncesha256Hash()- Hashes eine Zeichenkette mit SHA-256getNonce()- Generiert Nonce-PaardecodeJWT()- JWT-Token entschlüsseltvalidateJWTToken()- JWT-Zielgruppe und -Nonce validiertauthenticateWithGoogleSupabase()- 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
Weitere Schritte
Abschnitt mit dem Titel „Weitere Schritte“Bitte wechseln Sie zur plattform-spezifischen Einrichtungsanleitung für Ihre Zielplattform: