Saltar al contenido

Supabase Google Login en iOS

GitHub

Esta guía te ayudará a integrar Google Sign-In con Supabase Authentication en iOS. Se asume que ya has completado:

La implementación completa está disponible en el de la app de ejemplo, supabaseAuthUtils.ts archivo. Esta guía explica los conceptos clave y cómo usarlo.

El authenticateWithGoogleSupabase la función gestiona todo el flujo de autenticación:

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);
}

Para una explicación detallada del flujo de autenticación, incluyendo la generación de nonce, la validación de JWT y el inicio de sesión en Supabase, consulta la sección “Cómo funciona” en la guía de Configuración General.

Problema de caché de nonce en iOS

En iOS, Google Sign-In puede cachear tokens, lo que podría causar fallos en la validación del nonce. La validateJWTToken función detecta esto y lo gestiona automáticamente:

  1. Detección automática: La función comprueba si el nonce en el token coincide con el esperado nonceDigest
  2. Reintento automático: Si la validación falla, cierra la sesión de Google automáticamente y reintenta una vez
  3. Gestión de errores: Si el reintento también falla, se devuelve un error

Por qué ocurre esto: El SDK de Google Sign-In en iOS cachea tokens para mejorar el rendimiento. Si se devuelve un token cacheado, puede haber sido generado con un nonce distinto (o sin nonce), causando un desajuste.

La solución: La implementación lo gestiona automáticamente cerrando la sesión y reintentando, lo que obliga a Google a generar un token nuevo con el nonce correcto.

Solución manual (si el reintento automático no funciona):

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

Esto garantiza que se obtenga un token nuevo con el nonce correcto.

Para la referencia completa de code, consulta la Sección de referencia completa de Code en la guía de Configuración General.

La implementación del nonce sigue el patrón de la documentación de React Native Google Sign In:

  • rawNonce va a Supabase signInWithIdToken()
  • Supabase genera un hash de rawNonce y lo compara con el nonceDigest que se incluye en el ID token de Google Sign-In
  • nonceDigest (hash SHA-256, codificado en hex) se envía a nonce parámetro en las APIs de Google Sign-In

El authenticateWithGoogleSupabase la función incluye un retry parámetro:

  • Primera llamada (retry=false): si la validación falla, cierra sesión y reintenta una vez
  • Reintento de llamada (retry=true): si la validación vuelve a fallar, devuelve un error

Esto gestiona automáticamente el problema de caché de tokens en iOS.

Si la autenticación falla:

  • Error de nonce mismatch: La función reintenta automáticamente; revisa los logs de la consola. Si persiste, cierra sesión manualmente primero
  • Audience no válida: Verifica que tus Google Client IDs coincidan en Google Cloud Console y Supabase (tanto el de iOS como el de Web)
  • Error de validación del token: Asegúrate de estar usando mode: 'online' en la llamada a initialize para obtener un idToken
  • Configuración de Info.plist: Asegúrate de que Info.plist tenga los URL schemes y el GIDClientID correctos
  • Revisa la app de ejemplo code como referencia

Si estás usando Supabase Google Login en iOS para planificar flujos de cuenta y autenticación, conéctalo con Usando @capgo/capacitor-social-login para la capacidad nativa en Usando @capgo/capacitor-social-login, @capgo/capacitor-social-login para el detalle de implementación en @capgo/capacitor-social-login, @capgo/capacitor-passkey para los detalles de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para los detalles de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en la autenticación de dos factores.