Supabase Google Login - Configuración general
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Introducción
Sección titulada “Introducción”Esta guía te enseñará a integrar Google Sign-In con Supabase Authentication usando el plugin Social Login de Capacitor. Esta configuración te permite usar el Google Sign-In nativo en plataformas móviles mientras aprovechas Supabase Auth para la autenticación del backend.
Requisitos
Sección titulada “Prerrequisitos”Antes de empezar, asegúrate de:
-
Lee la Configuración general de Google Login guía para configurar las credenciales de Google OAuth
-
Sigue las guías específicas de cada plataforma para configurar las credenciales de Google OAuth en tu plataforma de destino:
Habilitar el proveedor de Google OAuth en Supabase
Sección titulada “Habilitar el proveedor Google OAuth en Supabase”-
Ve a tu Dashboard de Supabase
-
Haz clic en tu proyecto
-
Dirígete al
Authenticationmenú
-
Haz clic en el
Providerspestaña
-
Busca el
Googleprovider
-
Habilita el provider
-
Añade los client IDs de las plataformas que vayas a usar
-
Haz clic en el
Savebotón
¡Listo! Ya has habilitado Google Sign-In con Supabase Authentication 🎉
Cómo funciona Google Sign-In con Supabase Authentication Helper
Sección titulada “Cómo funciona Google Sign-In con el helper de Supabase Authentication”Esta sección explica cómo funciona la integración de Google Sign-In con Supabase internamente. Entender 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 par de nonce seguro siguiendo los 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 (64 caracteres hex)nonceDigest: Hash SHA-256 derawNonce(codificado en hex)nonceDigestse envía a Google Sign-In → Google incluye el digest del nonce en el ID tokenrawNoncese envía a Supabase → Supabase hace el hash del nonce original y lo compara con el nonce del token
2. Inicio de sesión con Google
Sección titulada “2. Google Sign-In”La función inicializa el plugin e inicia sesión 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. JWT Validation”Antes de enviar el token a Supabase, la implementación valida el 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 enviarlo a Supabase cumple varios propósitos importantes:
-
Prevenir peticiones inválidas: Si el token tiene un audience incorrecto o un error de nonce, Supabase lo rechazará de todos modos. Validar primero evita llamadas innecesarias a API y ofrece mensajes de error más claros.
-
Problemas de caché de tokens: En algunas plataformas (especialmente iOS), el SDK de Google Sign-In puede cachear tokens para mejorar el rendimiento. Si se devuelve un token en caché, este podría haber sido generado con un nonce distinto (o sin nonce), causando que Supabase lo rechace con un error de “nonce mismatch”. Al validar antes de enviar a Supabase, detectamos este problema pronto y podemos reintentar automáticamente con un token nuevo.
-
Seguridad (iOS): En iOS, la validación asegura que el token fue emitido para tus Google Client IDs específicos, evitando riesgos de seguridad al usar tokens destinados a otras aplicaciones.
-
Mejor manejo de errores: Detectar problemas antes de Supabase permite implementar lógica de reintento automático, algo esencial para gestionar los problemas de caché en iOS de forma transparente.
Si la validación falla, la función automáticamente:
- Cierra la sesión en Google (limpia los tokens en caché; crítico en iOS)
- Reintenta la autenticación una vez (fuerza la generación de un nuevo token con el nonce correcto)
- Si el reintento también falla, devuelve un error
4. Inicio de sesión en Supabase
Sección titulada “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 la de la app de ejemplo supabaseAuthUtils.ts archivo, que incluye:
getUrlSafeNonce()- Genera un nonce aleatorio seguro para URLsha256Hash()- Hashea el string con SHA-256getNonce()- Genera el par de noncesdecodeJWT()- Decodifica el token JWTvalidateJWTToken()- Valida el audience y el nonce del JWTauthenticateWithGoogleSupabase()- Función de autenticación principal con reintento automático
Archivos de ejemplo adicionales
Sección titulada “Additional Example Files”- SupabasePage.tsx - Componente de ejemplo con manejo de redirección (Web)
- SupabaseCreateAccountPage.tsx - Ejemplo de página de registro
Próximos pasos
Sección titulada “Próximos pasos”Consulta la guía de configuración específica para tu plataforma:
Continuar desde Supabase Google Login - Configuración general
Sección titulada “Continuar con Supabase Google Login - General Setup”Si estás usando Supabase Google Login - Configuración general para planificar los flujos de autenticación y de cuenta, conéctalo con Uso de @capgo/capacitor-social-login para la capacidad nativa al usar @capgo/capacitor-social-login, @capgo/capacitor-social-login para los detalles 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 Autenticación de dos factores para el detalle de implementación en la autenticación de dos factores.