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