Vai al contenuto

Supabase Google Login su iOS

GitHub

Questa guida ti aiuterà a integrare Google Sign-In con Supabase Authentication su iOS. Si assume che tu abbia già completato:

L'implementazione completa è disponibile nel file dell'app di supabaseAuthUtils.ts esempio. Questa guida spiega i concetti chiave e come usarlo.

L'oggetto authenticateWithGoogleSupabase la 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 del flusso di autenticazione, inclusa la generazione del nonce, la validazione JWT e il sign-in con Supabase, consulta la sezione Come funziona nella guida alla configurazione generale.

Problema di caching del nonce su iOS

Su iOS, Google Sign-In può mettere in cache i token, causando potenzialmente il fallimento della validazione del nonce. La validateJWTToken funzione rileva il problema e lo gestisce automaticamente:

  1. Rilevamento automatico: La funzione controlla se il nonce nel token corrisponde a quello atteso nonceDigest
  2. Riprova automatica: Se la validazione fallisce, effettua automaticamente il logout da Google e riprova una volta
  3. Gestione degli errori: Se anche il secondo tentativo fallisce, viene restituito un errore

Perché accade: SDK di Google Sign-In su iOS mette in cache i token per migliorare le performance. Se viene restituito un token in cache, potrebbe essere stato generato con un nonce diverso (o senza nonce), causando un mismatch.

La soluzione: L'implementazione gestisce tutto automaticamente effettuando il logout e riprovando, forzando Google a generare un nuovo token con il nonce corretto.

Soluzione manuale (se il riprovo automatico non funziona):

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

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

Per il riferimento completo a code, consulta la Sezione Reference completa di Code nella guida General Setup.

L'implementazione del nonce segue il pattern della documentazione di React Native Google Sign In:

  • rawNonce va verso quella di Supabase signInWithIdToken()
  • Supabase crea un hash di rawNonce e lo confronta con il nonceDigest che è incluso nell'ID token di Google Sign-In
  • nonceDigest (hash SHA-256, codificato in hex) viene inviato a nonce parametro nelle API di Google Sign-In

L'oggetto authenticateWithGoogleSupabase la funzione include un retry parametro:

  • Prima chiamata (retry=false): se la validazione fallisce, effettua il logout automatico 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 del token su iOS.

Se l'autenticazione fallisce:

  • Nonce mismatch: la funzione riprova automaticamente - controlla i log in console per i dettagli. Se il problema persiste, esegui prima il logout manualmente
  • Audience non valida: verifica che i Google Client ID corrispondano sia in Google Cloud Console che in Supabase (sia gli ID client iOS che Web)
  • La validazione del token è fallita: assicurati di usare mode: 'online' nella chiamata di initialize per ottenere un idToken
  • Configurazione Info.plist: assicurati che Info.plist abbia i corretti URL schemes e GIDClientID
  • Controlla il app di esempio code come riferimento

Se stai usando Supabase Google Login su iOS per pianificare i flussi di autenticazione e account, collegalo con Utilizzo di @capgo/capacitor-social-login per la funzionalità nativa in Utilizzo di @capgo/capacitor-social-login, @capgo/capacitor-social-login per i dettagli di implementazione in @capgo/capacitor-social-login, @capgo/capacitor-passkey per i dettagli di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric per i dettagli di implementazione in @capgo/capacitor-native-biometric, e Autenticazione a due fattori per i dettagli sull'implementazione dell'autenticazione a due fattori.