Iniciar sesión con Supabase y Google en iOS
Copie un prompt de configuración con los pasos de instalación y la guía de markdown completa para este plugin.
Introducción
Sección titulada “Introducción”Esta guía te ayudará a integrar el inicio de sesión de Google con la autenticación de Supabase en iOS. Se asume que ya has completado:
- el Configuración de inicio de sesión de Google para iOS
- la Configuración general de inicio de sesión de Google de Supabase.
Implementación
Sección titulada “Implementación”La implementación completa está disponible en el aplicación de ejemplo supabaseAuthUtils.ts Este manual explica los conceptos clave y cómo utilizarlo.
Usando la Ayuda de Autenticación
Sección titulada “Usando la Ayuda de Autenticación”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);}Cómo Funciona
Sección titulada “Cómo Funciona”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 el manual de Configuración General.
Importantes advertencias
Sección titulada “Importantes advertencias”Problemas de caché de tokens y nonce en iOS
Sección titulada “Problemas de caché de tokens y nonce en iOS”Problema de caché de nonce en iOS
En iOS, Google Sign-In puede cachear tokens, lo que puede provocar que la validación de nonce fracase. El validateJWTToken función detecta esto y lo maneja automáticamente:
- Detected Automáticamente: La función verifica si el nonce en el token coincide con el esperado
nonceDigest - Intento Automático: Si la validación falla, se sale automáticamente de Google y se intenta una vez
- Gestión de errores: Si el intento también falla, se devuelve un error
¿Por qué sucede esto: iOS Google Sign-In SDK almacena 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 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 la repetición automática no funciona): Copiar a portapapeles
// Logout first to clear cached tokensawait SocialLogin.logout({ provider: 'google' });
// Then authenticateconst result = await authenticateWithGoogleSupabase();Para la referencia completa __CAPGO_KEEP_0__, consulte la
Sección de referencia completa code en la guía de configuración general Complete Code Reference section in the General Setup guide.
Sección titulada “Notas importantes”
¿Por qué sucede estoGestión de Nonce
Sección titulada “Gestión de Nonce”La implementación de nonce sigue el patrón del documento de React Native Google Sign In se dirige a Supabase’s:
rawNonceSupabase hace una hash designInWithIdToken()- y la compara con el
rawNonceque se incluye en el token de ID de Google Sign-InnonceDigest(hash SHA-256, codificado en hexadecimal) se dirige al nonceDigestparámetro en las API de Google Sign-InnonceMecanismo de Retransmisión Automática
Sección titulada “Mecanismo de Retransmisión Automática”
Nonce Handling: Manejo de NonceLa función incluye un parámetro: authenticateWithGoogleSupabase Llamada inicial ( retry ): Si la validación falla, se cierra automáticamente y se vuelve a intentar una vez
- Llamada de retry (
retry=false): Si la validación falla de nuevo, devuelve un error inmediatamente - Esto resuelve automáticamente el problema de caché de tokens de iOS.
retry=trueSolución de problemas
Sección titulada “Solución de problemas”
Si falla la autenticación:
Diferencia de nonce__CAPGO_KEEP_0__
- __CAPGO_KEEP_1__: La función intenta automáticamente de nuevo - revisa los registros del console para obtener más detalles. Si persiste, inicia sesión manualmente primero
- Público inválido: Verifica que tus identificadores de cliente de Google coincidan en ambas consolas de Google Cloud y Supabase (ambos identificadores de cliente iOS y web)
- La validación de token falla: Asegúrate de que estés utilizando
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 obtener referencias