Saltar al contenido

Inicio de Sesión de Google en Supabase en iOS

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 archivo del supabaseAuthUtils.ts aplicación de ejemplo

Este guía explica los conceptos clave y cómo utilizarlo.Usando el Asistente de Autenticación

Sección titulada “Usando el Asistente de Autenticación”

The authenticateWithGoogleSupabase la función maneja 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 de cómo funciona el flujo de autenticación, incluyendo la generación de nonce, la validación de JWT y el inicio de sesión en Supabase, consulte la sección ¿Cómo Funciona? en la Guía de Configuración General.

iOS Problema de caché de nonce

En iOS, Google Sign-In puede cachear tokens, lo que puede causar que la validación de nonce fracase. El validateJWTToken función detecta esto y lo maneja automáticamente:

  1. Detección automática: La función verifica si el nonce en el token coincide con el esperado nonceDigest
  2. Reintentos automáticos: Si la validación falla, se sale automáticamente de Google y se vuelve a intentar una vez
  3. Manejo de errores: Si el reintento también falla, se devuelve un error

¿Por qué sucede esto?: iOS Google Sign-In SDK cachea tokens para mejorar el rendimiento. Cuando se devuelve un token caché, puede haber sido generado con un diferente nonce (o sin nonce), lo que causa una desincronización.

La solución: La implementación maneja automáticamente esto mediante el cierre de sesión y la repetición, lo que fuerza a Google a generar un token fresco con el nonce correcto.

Manual Workaround (si no funciona la repetición automática):

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

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

Para la referencia completa code, consulte la Sección de referencia completa Code en la guía de configuración general.

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

  • rawNonce va a Supabase’s signInWithIdToken()
  • Supabase hace una hash de rawNonce y la compara con el nonceDigest que se incluye en el token de ID de Google Sign-In
  • nonceDigest (hash SHA-256, codificado en hexadecimal) va al nonce parámetro en las API de Google Sign-In

La authenticateWithGoogleSupabase función incluye un retry parámetro:

  • Primera llamada (retry=false): Si falla la validación, se cierra automáticamente y se vuelve a intentar
  • Llamada de retry (retry=true): Si falla la validación nuevamente, devuelve un error inmediatamente

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

Si falla la autenticación:

  • Diferencia de nonce: La función vuelve a intentarlo automáticamente - revisa los registros del consola para obtener detalles. Si persiste, inicia sesión manualmente primero
  • Auditorio inválido: Verifica que tus IDs de cliente de Google coincidan en tanto en el Console de Cloud de Google como en Supabase (ambos IDs de cliente de iOS y Web)
  • La validación de token falla: Asegúrate de utilizar mode: 'online' en la llamada de inicialización para obtener un idToken
  • Configuración de Info.plist: Asegúrate de que Info.plist tenga los esquemas de URL y GIDClientID correctos
  • Revisa el ejemplo de aplicación code para referencia

Si estás utilizando Supabase Google Login en iOS para planificar la autenticación y flujos de cuenta, conectarlo con Usando @capgo/capacitor-login-social para la capacidad nativa en Usando @capgo/capacitor-login-social, @capgo/capacitor-login-social para el detalle de implementación en @capgo/capacitor-login-social, @capgo/capacitor-passkey para el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-biometría-nativa para el detalle de implementación en @capgo/capacitor-biometría-nativa, y Autenticación en dos factores para el detalle de implementación en Autenticación en dos factores.