Saltar al contenido

Supabase Google Login en iOS

GitHub

Esta guía te ayudará a integrar la autenticación de Google con Supabase en iOS. Se supone que ya has completado:

La implementación completa está disponible en el archivo de la aplicación de ejemplo. Esta guía explica los conceptos clave y cómo utilizarlo. supabaseAuthUtils.ts Usando la Ayuda de Autenticación

El authenticateWithGoogleSupabase 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.

Problema de caché de nonce de iOS

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. Detectación Automática: La función verifica si el nonce en el token coincide con el nonce esperado nonceDigest
  2. Reintentar Automáticamente: Si la validación fracasa, se cierra automáticamente la sesión de Google y se vuelve a intentar una vez
  3. Manejo de Errores: Si el reintentar también fracasa, 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 nonce diferente (o sin nonce), lo que causa un desacuerdo

La solución: La implementación maneja automáticamente esto al cerrar sesión y volver a intentarlo, lo que fuerza a Google a generar un token fresco con el nonce correcto.

Trabajo manual 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 Referencia completa Code de la sección de configuración general.

La implementación del nonce sigue el patrón de la Documentación de inicio de sesión de Google de React Native:

  • 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 inicio de sesión de Google
  • nonceDigest que es un hash SHA-256 codificado en hexadecimal, va a nonce parámetro en las API de inicio de sesión de Google

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

  • Primera llamada (retry=falseSi la validación falla, se cierra sesión automáticamente y se vuelve a intentar una vez
  • Retransmisión de llamada (retry=trueSi la validación falla nuevamente, devuelve un error inmediatamente

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

Si falla la autenticación:

  • Desacuerdo de nonce: La función se vuelve a intentar automáticamente - consulte los registros del console para obtener detalles. Si persiste, inicie sesión manualmente primero
  • Auditorio inválido: Verifique que sus IDs de cliente de Google coincidan en tanto en el Console de Google Cloud como en Supabase (ambos IDs de cliente de iOS y Web)
  • La validación de tokens 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 los flujos de cuenta, conecte 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 el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para el detalle de implementación en @capgo/capacitor-native-biometric, y Dos factores de autenticación para el detalle de implementación en Dos factores de autenticación.