Supabase Google Login - Configuración General
Copiar 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 guiará a través de la integración de Sign-In de Google con la autenticación de Supabase utilizando el plugin de inicio de sesión social Capacitor. Esta configuración te permite utilizar Sign-In de Google nativo en plataformas móviles mientras aprovechas la autenticación de Supabase para la autenticación de backend.
Requisitos previos
Sección titulada “Requisitos previos”Antes de empezar, asegúrate de tener:
-
Leído el Configuración general de inicio de sesión de Google guía para configurar las credenciales de OAuth de Google
-
Siguiste las guías específicas de la plataforma para configurar las credenciales de OAuth de Google para tu plataforma objetivo:
Habilitar proveedor de autenticación de Google en Supabase
Sección titulada “Habilitar proveedor de autenticación de Google en Supabase”-
Ve a tu Panel de Supabase
-
Haz clic en tu proyecto
-
No vaya al
Authenticationmenú
-
Haga clic en la
Providerspestaña
-
Encuentre el
Googleproveedor
-
Habilite el proveedor
-
Agregue los identificadores de cliente para las plataformas que planea usar
-
Haga clic en el
Savebotón
¡Eso es todo! Ahora has habilitado el inicio de sesión con Google con autenticación de Supabase 🎉
Cómo funciona el Asistente de Inicio de Sesión con Google con Autenticación de Supabase
Sección titulada “Cómo funciona el Asistente de Inicio de Sesión con Google con Autenticación de Supabase”Esta sección explica cómo funciona la integración del inicio de sesión con Google con Supabase bajo la cubierta. Comprender este flujo te ayudará a implementar y depurar el proceso de autenticación.
1. Generación de nonce
Sección titulada “1. Generación de nonce”La implementación genera un pair de nonce seguro según los requisitos de Supabase nonce Requisitos de nonce de Supabase:
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Generate nonce pairasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}Flujo:
rawNonce: Cadena aleatoria segura para URL (64 caracteres hexadecimales)nonceDigest: Hash SHA-256 derawNonce(codificado en hexadecimal)nonceDigestse pasa a Google Sign-In → Google incluye el nonce digest en el token de IDrawNoncese pasa a Supabase → Supabase hashifica el nonce bruto y compara con el nonce del token
2. Inicio de sesión con Google
Sección titulada “2. Inicio de sesión con Google”La función inicia el plugin y se inicia con Google:
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. Validación de JWT
Sección titulada “3. Validación de JWT”Antes de enviar el token a Supabase, la implementación valida el token JWT:
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}¿Por qué validar antes de Supabase?
Validar el token JWT antes de enviar el token a Supabase cumple varios propósitos importantes:
-
Prevenir solicitudes inválidas: Si el token tiene una audiencia o nonce incorrectos, Supabase rechazará el token de todos modos. Validar primero evita llamadas innecesarias API y proporciona mensajes de error más claros.
-
Problemas de caché de tokensOn algunas plataformas (especialmente iOS), Google Sign-In SDK puede cachear tokens para mejorar el rendimiento. Cuando se devuelve un token caché, el token caché puede haber sido generado con un nonce diferente (o sin nonce en absoluto), lo que causa que Supabase rechace el token con un error de 'mismatch de nonce'. Al validar antes de enviar a Supabase, podemos detectar este problema temprano y reintentar automáticamente con un token fresco.
-
Seguridad (iOS): En iOS, la validación asegura que el token se emitió para tus Client IDs de Google específicos, evitando posibles problemas de seguridad al utilizar tokens destinados a otras aplicaciones.
-
Mejor Manejo de Errores: Al detectar problemas antes de Supabase permite la lógica de reintentos automática, lo cual es esencial para manejar los problemas de caché de iOS de manera transparente.
Si la validación falla, la función realiza automáticamente:
- Sale de Google (elimina tokens caché - crítico en iOS)
- Reintentar la autenticación una vez (obliga la generación de un token fresco con nonce correcto)
- Si el reintentar también falla, devuelve un error
4. Inicio de Sesión con Supabase
Título de la sección '4. Inicio de Sesión con Supabase'Finalmente, el token validado se envía a Supabase:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Referencia completa de Code
Sección titulada “Referencia completa de Code”La implementación completa está disponible en el archivo del supabaseAuthUtils.ts archivo, que incluye:
getUrlSafeNonce()- Genera un valor aleatorio seguro para URLsha256Hash()- Hashifica una cadena con SHA-256getNonce()- Genera pareja de noncedecodeJWT()- Desencripta token JWTvalidateJWTToken()- Valida audiencia y nonce de JWTauthenticateWithGoogleSupabase()- Función principal de autenticación con reintentos automáticos
Archivos de ejemplo adicionales
Sección titulada “Archivos de ejemplo adicionales”- SupabasePage.tsx - Componente de ejemplo con manejo de redirecciones (Web)
- SupabaseCreateAccountPage.tsx - Página de registro de cuenta de ejemplo
Pasos siguientes
Sección titulada “Pasos siguientes”Por favor, proceda al guía de configuración específica de la plataforma para tu plataforma objetivo:
Sigue adelante desde Supabase Google Login - Configuración general
Sección titulada “Sigue adelante desde Supabase Google Login - Configuración general”Si estás utilizando Supabase Google Login - Configuración general para planificar la autenticación y los flujos de cuenta, conecta 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-clave-privada para el detalle de implementación en @capgo/capacitor-clave-privada, @capgo/capacitor-autenticación-biometrica-nativa para el detalle de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en Autenticación de dos factores.