Google Login di Supabase su iOS
Introduzione
Section titled “Introduzione”Questa guida ti aiuterà a integrare Google Sign-In con l’autenticazione Supabase su iOS. Si presume che tu abbia già completato:
Implementazione
Section titled “Implementazione”L’implementazione completa è disponibile nel file supabaseAuthUtils.ts dell’app di esempio. Questa guida spiega i concetti chiave e come utilizzarlo.
Utilizzo dell’Helper di Autenticazione
Section titled “Utilizzo dell’Helper di Autenticazione”La funzione authenticateWithGoogleSupabase gestisce l’intero flusso di autenticazione:
import { authenticateWithGoogleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithGoogleSupabase();if (result.success) { console.log('Accesso effettuato:', result.user); // Naviga verso la tua area autenticata} else { console.error('Errore:', result.error);}Come Funziona
Section titled “Come Funziona”Per una spiegazione dettagliata di come funziona il flusso di autenticazione, inclusa la generazione del nonce, la validazione JWT e l’accesso a Supabase, consulta la sezione Come Funziona nella guida alla Configurazione Generale.
Avvertenze Importanti
Section titled “Avvertenze Importanti”Caching dei Token iOS e Problemi con il Nonce
Section titled “Caching dei Token iOS e Problemi con il Nonce”Problema di Caching del Nonce su iOS
Su iOS, Google Sign-In può memorizzare i token nella cache, il che può causare il fallimento della validazione del nonce. La funzione validateJWTToken rileva questo e lo gestisce automaticamente:
- Rilevamento Automatico: La funzione controlla se il nonce nel token corrisponde al
nonceDigestprevisto - Retry Automatico: Se la validazione fallisce, effettua automaticamente il logout da Google e riprova una volta
- Gestione degli Errori: Se anche il retry fallisce, viene restituito un errore
Perché succede: L’SDK di Google Sign-In per iOS memorizza i token nella cache per prestazioni. Quando viene restituito un token in cache, potrebbe essere stato generato con un nonce diverso (o senza nonce), causando una mancata corrispondenza.
La soluzione: L’implementazione gestisce automaticamente questo effettuando il logout e riprovando, il che forza Google a generare un token fresco con il nonce corretto.
Soluzione Manuale (se il retry automatico non funziona):
// Effettua prima il logout per cancellare i token in cacheawait SocialLogin.logout({ provider: 'google' });
// Poi autenticaconst result = await authenticateWithGoogleSupabase();Questo garantisce che venga ottenuto un token fresco con il nonce corretto.
Per il riferimento completo al codice, consulta la sezione Riferimento Completo al Codice nella guida alla Configurazione Generale.
Note Importanti
Section titled “Note Importanti”Gestione del Nonce
Section titled “Gestione del Nonce”L’implementazione del nonce segue il modello della documentazione React Native Google Sign In:
rawNonceva asignInWithIdToken()di Supabase- Supabase crea un hash di
rawNoncee lo confronta con ilnonceDigestche è incluso nell’ID token di Google Sign-In nonceDigest(hash SHA-256, codificato in esadecimale) va al parametrononcenelle API di Google Sign-In
Meccanismo di Retry Automatico
Section titled “Meccanismo di Retry Automatico”La funzione authenticateWithGoogleSupabase include un parametro retry:
- Prima chiamata (
retry=false): Se la validazione fallisce, effettua automaticamente il logout e riprova una volta - Chiamata di retry (
retry=true): Se la validazione fallisce di nuovo, restituisce immediatamente un errore
Questo gestisce automaticamente il problema del caching dei token iOS.
Risoluzione dei Problemi
Section titled “Risoluzione dei Problemi”Se l’autenticazione fallisce:
- Nonce non corrispondente: La funzione riprova automaticamente - controlla i log della console per i dettagli. Se persiste, effettua manualmente il logout prima
- Audience non valido: Verifica che i tuoi Google Client ID corrispondano sia nella Console Google Cloud che in Supabase (sia iOS che Web client ID)
- Validazione del token fallita: Assicurati di utilizzare
mode: 'online'nella chiamata initialize per ottenere un idToken - Configurazione Info.plist: Assicurati che Info.plist abbia gli schemi URL corretti e GIDClientID
- Consulta il codice dell’app di esempio per riferimento