Saltare al contenuto

Supabase Google Login su iOS

Questa guida ti aiuterà a integrare Google Sign-In con l'autenticazione Supabase su iOS. Si presume che tu abbia già completato:

L'implementazione completa è disponibile nel file dell'applicazione di esempio. Questa guida spiega i concetti chiave e come utilizzarla. supabaseAuthUtils.ts Utilizzo dell'helper di autenticazione

Il authenticateWithGoogleSupabase funzione gestisce l’intero flusso di autenticazione:

import { authenticateWithGoogleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithGoogleSupabase();
if (result.success) {
console.log('Signed in:', result.user);
// Navigate to your authenticated area
} else {
console.error('Error:', result.error);
}

Per una spiegazione dettagliata di come funziona il flusso di autenticazione, compresa la generazione di nonce, la validazione di JWT e l’accesso a Supabase, vedere la sezione Come funziona del guide di configurazione generale.

iOS Problema di Cache del Nonce

Su iOS, Google Sign-In può memorizzare i token, che possono causare la fallita della validazione del nonce. Il validateJWTToken funzione rileva questo e lo gestisce automaticamente:

  1. Rilevamento Automatico: La funzione controlla se il nonce nel token corrisponde a quello previsto nonceDigest
  2. Ritentativo Automatico: Se la validazione fallisce, si esce automaticamente da Google e si riprova una volta
  3. Gestione degli Errori: Se anche il riprovo fallisce, viene restituito un errore

Perché succede: iOS Google Sign-In SDK memorizza i token per migliorare le prestazioni. Quando un token memorizzato viene restituito, potrebbe essere stato generato con un nonce diverso (o nessun nonce), causando un mismatch.

La soluzione: L'implementazione gestisce automaticamente questo problema loggando fuori e riprovando, il che costringe Google a generare un nuovo token con il nonce corretto.

Soluzione Manuale (se la riprova automatica non funziona):

// Logout first to clear cached tokens
await SocialLogin.logout({ provider: 'google' });
// Then authenticate
const result = await authenticateWithGoogleSupabase();

Questo garantisce l'ottenimento di un nuovo token con il nonce corretto.

Per la documentazione completa code vedere la sezione "Documentazione completa code" nella guida di configurazione generale Complete Code Reference section in the General Setup guide.

Sottosezione intitolata "Note importanti"

Gestione del nonce

Sottosezione intitolata "Gestione del nonce"

L'implementazione del nonce segue il pattern da

Important Notes documentazione di React Native Google Sign In:

  • rawNonce va a Supabase's signInWithIdToken()
  • Supabase crea un hash di rawNonce e lo confronta con il nonceDigest che è incluso nel token ID da Google Sign-In
  • nonceDigest (hash SHA-256, codificato in esadecimale) va al nonce parametro in API di Google Sign-In

Il authenticateWithGoogleSupabase funzione include un retry parametro:

  • Prima chiamata (retry=false): Se la validazione fallisce, si esce automaticamente e si riprova una volta
  • Ripeti la chiamata (retry=true): Se la validazione fallisce nuovamente, restituisce immediatamente un errore

Questo gestisce automaticamente il problema di caching dei token iOS.

Se la autenticazione fallisce:

  • Mancanza di nonce: La funzione si riprova automaticamente - controlla i log del console per ulteriori dettagli. Se persiste, esegui il logout manuale per primo
  • Audience non valida: Verifica che gli ID Client Google corrispondano in entrambi Google Cloud Console e Supabase (entrambi gli ID client iOS e Web)
  • La validazione del token fallisce: Assicurati di utilizzare mode: 'online' in l'invocazione di inizializzazione per ottenere un idToken
  • Configurazione di Info.plist: Assicurati che Info.plist abbia i corretti schemi di URL e GIDClientID
  • Rivedi l' esempio di app code per riferimento

Se stai utilizzando Supabase Google Login on iOS per pianificare l'autenticazione e le flussi di account, connettilo con Usando @capgo/capacitor-login-social per la capacità nativa in Usando @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 L'autenticazione a due fattori per il dettaglio di implementazione in L'autenticazione a due fattori.