Saltar al contenido

Iniciar sesión con Supabase y Google en iOS

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:

La implementación completa está disponible en el aplicación de ejemplo supabaseAuthUtils.ts Este manual explica los conceptos clave y cómo utilizarlo.

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

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:

  1. Detected Automáticamente: La función verifica si el nonce en el token coincide con el esperado nonceDigest
  2. Intento Automático: Si la validación falla, se sale automáticamente de Google y se intenta una vez
  3. 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 tokens
await SocialLogin.logout({ provider: 'google' });
// Then authenticate
const 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 esto

La implementación de nonce sigue el patrón del documento de React Native Google Sign In se dirige a Supabase’s:

  • rawNonce Supabase hace una hash de signInWithIdToken()
  • y la compara con el rawNonce que se incluye en el token de ID de Google Sign-In nonceDigest (hash SHA-256, codificado en hexadecimal) se dirige al
  • nonceDigest parámetro en las API de Google Sign-In nonce Mecanismo de Retransmisión Automática

Sección titulada “Mecanismo de Retransmisión Automática”

Nonce Handling: Manejo de Nonce

La 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