Supabase Google Login - Allgemeine Einstellungen
Einen Setup-Vorlage mit den Installationsanweisungen und der vollständigen Markdown-Dokumentation für diesen Plugin kopieren.
Einführung
Abschnitt mit dem Titel „Einführung“Diese Anleitung führt Sie durch die Integration von Google Sign-In mit Supabase Authentication 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 context HTML-Textfragment aus einer längeren Capgo-UI-Zeichenfolge (Elternschlüssel `read_the_style_guide`). Seite/Bereich: Capgo-Marketingwebsite. Rolle: Website-Textzeile. Gesehen in: Seite contributing.astro. Nachrichtenschlüssel `read_the_style_guide` (Lesen Sie die Style Guide).
-
Google-Login-Allgemeine-Einstellungen
Google OAuth-Anbieter in Supabase aktivieren
Abschnitt mit dem Titel “Google OAuth-Anbieter in Supabase aktivieren”-
Gehe zu Ihrem Supabase-Dashboard
-
Klicken Sie auf Ihr Projekt
-
Gehe zu dem
AuthenticationMenü
-
Klicke auf das
ProvidersMenüsymbol
-
Finde den
GoogleAnbieter
-
Aktiviere den Anbieter
-
Füge die Client-IDs für die Plattformen ein, die du verwenden möchtest
-
Klicken Sie auf den
SaveSchaltfläche
Wie Google Sign-In mit Supabase-Authentifizierung-Helfer funktioniert
Abschnitt mit dem Titel 'Wie Google Sign-In mit Supabase-Authentifizierung-Helfer funktioniert'
Dieser Abschnitt erklärt, wie die Integration von Google Sign-In mit Supabase unter der Haube funktioniert. Ein Verständnis dieses Flusses hilft Ihnen dabei, die Authentifizierungsprozess zu implementieren und zu überprüfen.Vollständige Implementierung
1. Zufällige Zahlenerzeugung
Sektion mit dem Titel “1. Zufällige Zahlenerzeugung”Die Implementierung generiert ein sicheres Zufallszahlspaarmit entsprechender Einhaltung der Supabase-Zufallszahlanforderungen:
// 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 };}Ablauf:
rawNonce: URL-sichere zufällige Zeichenfolge (64 hexadezimale Zeichen)nonceDigest: SHA-256-Hash vonrawNonce(hexadezimale Kodierung)nonceDigestwird an Google Sign-In weitergeleitet → Google enthält den Zufallszahlendigest im ID-TokenrawNoncewird an Supabase weitergeleitet → Supabase hashet die Rohzufallszahl und vergleicht sie mit dem Token’s Zufallszahl
2. Google-Anmeldung
Abschnitt mit dem Titel “2. Google-Anmeldung”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 };}Wozu die Validierung vor Supabase?
Die Validierung des JWT-Tokens vor dem Senden des Tokens an Supabase dient mehreren wichtigen Zwecken:
-
Prävention von ungültigen Anfragen: Wenn der Token eine falsche Zielgruppe oder ein Nichtübereinstimmung von Nonce hat, lehnt Supabase den Token ohnehin ab. Die Validierung zuerst vermeidet unnötige API-Aufrufe und liefert klare Fehlermeldungen.
-
Token-Caching-ProblemeOn einigen Plattformen (insbesondere iOS), Google Sign-In SDK kann Tokens für Leistung zwischenspeichern. Wenn ein gecachter Token zurückgegeben wird, kann der gecachte Token möglicherweise mit einem anderen oder keinem Nonce generiert worden sein, wodurch Supabase den Token mit einem 'Nonce-Mismatch'-Fehler ablehnt. Durch die Validierung vor dem Senden 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 der Token für Ihre spezifischen Google-Kunden-IDs ausgestellt wurde, was potenzielle Sicherheitsprobleme von der Verwendung von Tokens für andere Anwendungen verhindert.
-
Bessere Fehlerbehandlung: Durch die Erkennung von Problemen vor Supabase ist eine automatische Wiederholungslogik erforderlich, die für die transparente Behandlung von iOS-Caching-Problemen unerlässlich ist.
Wenn die Validierung fehlschlägt, führt die Funktion automatisch:
- Abmelden von Google (Löschen der gecachten Tokens - kritisch auf iOS)
- Wiederholte Authentifizierung einmal (Zwingt eine frische Token-Generierung mit korrektem Nonce)
- Wenn auch der Wiederholungsversuch fehlschlägt, wird ein Fehler zurückgegeben
4. Supabase-Anmeldung
Abschnitt mit dem Titel „4. Supabase-Anmeldung“Zum Schluss 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});Complete Code-Referenz
Abschnitt mit dem Titel „Complete Code-Referenz“Die vollständige Implementierung ist im Beispiel-App’s supabaseAuthUtils.ts Datei, die Folgendes enthält:
getUrlSafeNonce()- Generiert eine URL-sichere zufällige Noncesha256Hash()- Hashes eine Zeichenkette mit SHA-256getNonce()- Generiert eine Nonce-PaardecodeJWT()- Decodiert ein JWT-TokenvalidateJWTToken()- Überprüft das 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
Zukünftige Schritte
Abschnitt mit dem Titel “Zukünftige Schritte”Bitte gehen Sie zur plattform-spezifischen Einrichtungsanleitung für Ihre Zielplattform:
Fortfahren von Supabase Google Login - Allgemeine Einstellungen
Sektion mit dem Titel “Fortfahren von Supabase Google Login - Allgemeine Einstellungen”Wenn Sie Supabase Google Login - Allgemeine Einstellungen Supabase Google Login - Allgemeine Einstellungen zur Planung der Authentifizierung und der Kontoflows verwenden, 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 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-biometrisch und Zweifaktor-Authentifizierung Für die Implementierungsdetails in Zweifaktor-Authentifizierung.