Supabase Google Login - Configurazione generale
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Introduzione
Sottosezione intitolata “Introduzione”Questa guida ti guiderà attraverso l'integrazione di Google Sign-In con l'autenticazione Supabase utilizzando il plugin di accesso sociale Capacitor.
Requisiti preliminari
Sottosezione intitolata “Requisiti preliminari”Prima di iniziare, assicurati di avere:
-
Letto il Setup di Google Login Generale la guida per configurare le credenziali di autenticazione Google OAuth
-
Seguito le guide specifiche per piattaforma per configurare le credenziali di autenticazione Google OAuth per la tua piattaforma di destinazione:
Abilita il provider di autenticazione Google in Supabase
Sezione intitolata “Abilita il provider di autenticazione Google in Supabase”-
Vai al tuo Pannello di controllo di Supabase
-
Clicca sul tuo progetto
-
Vai al
Authenticationmenu
-
Clicca sulla
Providerstab
-
Trova il
Googleprovider
-
Abilita il provider
-
Aggiungi gli ID client per le piattaforme che intendi utilizzare
-
Clicca sul
Savebutton
Ecco, hai ora abilitato l'accesso con Google con l'autenticazione di Supabase 🎉
Come funziona l'aiuto per l'accesso con Google con l'autenticazione di Supabase
Sezione intitolata “Come funziona l'aiuto per l'accesso con Google con l'autenticazione di Supabase”Questa sezione spiega come funziona l'integrazione di Google Sign-In con Supabase sotto la superficie. Comprendere questo flusso ti aiuterà a implementare e risolvere i problemi relativi al processo di autenticazione.
Sezione intitolata “1. Generazione di Nonce”
L'implementazione genera un paio di nonce sicuro in base allerichieste di nonce di Supabase Copia nel portapenne:
// 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 };}__CAPGO_KEEP_0__
rawNonce: string casellario sicuro (64 caratteri esadecimali)nonceDigest: SHA-256 dell'hash dirawNonce(codificato in esadecimale)nonceDigestviene passato a Google Sign-In → Google include il digest nonce nel token IDrawNonceviene passato a Supabase → Supabase calcola l'hash del nonce e lo confronta con il nonce del token
2. Google Sign-In
Sottosezione intitolata “2. Google Sign-In”La funzione inizializza il plugin e si connette con Google:
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. Validazione JWT
Sottosezione intitolata “3. Validazione JWT”Prima di inviare il token a Supabase, l'implementazione valuta il token JWT:
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 };}Perché validare prima di Supabase?
La validazione del token JWT prima di inviare il token a Supabase serve diversi scopi importanti:
-
Prevenire Richieste Non Valide: Se il token ha un'audience o un nonce errato, Supabase rifiuterà comunque il token. La validazione prima evita chiamate API non necessarie e fornisce messaggi di errore più chiari.
-
Problemi di Cache dei Token: Su alcune piattaforme (soprattutto iOS), Google Sign-In SDK può memorizzare i token per prestazioni. Quando viene restituito un token memorizzato, il token memorizzato potrebbe essere stato generato con un diverso nonce (o nessun nonce), causando Supabase a rifiutare il token con un errore di “mismatch nonce”. Validando prima di inviare a Supabase, possiamo rilevare questo problema in anticipo e riprovare automaticamente con un token fresco.
-
Sicurezza (iOS): La validazione assicura che il token sia stato emesso per i tuoi ID Client Google specifici, prevenendo potenziali problemi di sicurezza dall'utilizzo di token destinati ad altre applicazioni.
-
Miglioramento della Gestione degli Errori: Rilevare gli errori prima di Supabase consente la logica di riprova automatica, essenziale per gestire trasparentemente i problemi di cache iOS.
Se la validazione fallisce, la funzione riprova automaticamente:
- Si disconnette da Google (cancella i token memorizzati - critico su iOS)
- Riprova l'autenticazione una volta (forza la generazione di un nuovo token con nonce corretto)
- Se anche il riprova fallisce, restituisce un errore
4. Accedi a Supabase
Sottosezione intitolata “4. Accedi a Supabase”Infine, il token validato viene inviato a Supabase:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Complete Code Reference
Section titled “Complete Code Reference”L'implementazione completa è disponibile nell' esempio dell'applicazione supabaseAuthUtils.ts file, che include:
getUrlSafeNonce()- Genera un nonce casalingo sicuro per URLsha256Hash()- Cifra stringa con SHA-256getNonce()- Genera coppia noncedecodeJWT()- Decodifica token JWTvalidateJWTToken()- Verifica l'audience e il nonce JWTauthenticateWithGoogleSupabase()- Funzione di autenticazione principale con ritentativo automatico
Esempi di file aggiuntivi
Sezione intitolata “Esempi di file aggiuntivi”- SupabasePage.tsx - Componente di esempio con gestione del redirect (Web)
- SupabaseCreateAccountPage.tsx - Pagina di esempio per la registrazione
Passaggi successivi
Sottosezione intitolata “Passaggi successivi”Procedere al setup specifico per la piattaforma di destinazione:
Continua da Supabase Google Login - Setup generale
Sottosezione intitolata “Continua da Supabase Google Login - Setup generale”Se stai utilizzando Supabase Google Login - Setup generale per pianificare l'autenticazione e le flussi di account, connettilo con Utilizzando @capgo/capacitor-login sociale per la capacità nativa in Utilizzare @capgo/capacitor-login-social, @capgo/capacitor-login-social per il dettaglio di implementazione in @capgo/capacitor-login-social, @capgo/capacitor-passkey per il dettaglio di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-biometric-nativo per il dettaglio di implementazione in @capgo/capacitor-biometric-nativo, e Autenticazione a due fattori per il dettaglio di implementazione in Autenticazione a due fattori.