Saltar al contenido principal
Tutoriales

Configuración de autenticación de Supabase con el plugin de inicio de sesión social Capacitor

Aprende a integrar la autenticación de Supabase con el plugin de inicio de sesión social Capgo para una autenticación sin problemas de Google, Apple y Facebook en tu aplicación Capacitor.

Martin Donadieu

Martin Donadieu

Gerente de contenido

Configuración de autenticación de Supabase con el plugin de inicio de sesión social Capacitor

Configurando la autenticación en aplicaciones móviles puede ser complejo, pero combinarlo con el Supabase y el plugin de inicio de sesión social Capgo Social Login makes it straightforward. This tutorial will guide you through integrating social authentication (Google, Apple, Facebook) with Supabase in your Capacitor app.

__CAPGO_KEEP_0__

aplicación. ¿Por qué usar Supabase con inicio de sesión social? @capgo/capacitor-social-login proporciona un backend como servicio robusto con autenticación integrada, mientras que el plugin @capgo/capacitor-social-login ofrece autenticación social nativa en plataformas iOS, Android y web. Para una integración más estrecha de Supabase, el plugin de autenticación nativa y acceso JWT de Supabase se agregan a través de Supabase con el plugin de autenticación nativa y acceso JWT de Supabase se agregan a través de @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-supabase. Juntos, proporcionan:

  • Autenticación social sin problemas
  • Gestión de tokens seguros
  • Compatibilidad cruzada de plataformas
  • Integración de base de datos en tiempo real
  • Gestión de usuarios integrada

Requisitos previos

Antes de empezar, asegúrate de tener:

  • Un proyecto Capacitor configurado
  • Una cuenta y proyecto de Supabase
  • Cuentas de desarrollador para tus proveedores sociales elegidos (Google, Apple, Facebook)

Paso 1: Instala y configura el plugin de inicio de sesión social

Primero, instala el plugin de inicio de sesión social Capgo:

npm install @capgo/capacitor-social-login
npx cap sync

Ver Iniciar sesión en redes sociales y Supabase las páginas de plugins para la configuración específica de la plataforma.

Paso 2: Configuración del proyecto de Supabase

Crear y configurar su proyecto de Supabase

  1. Crear un proyecto de Supabase:

    • Ir a supabase.com y registrarse/ingresar
    • Hacer clic “Nuevo Proyecto”
    • Elige tu organización
    • Ingrese un Nombre del Proyecto (por ejemplo, “MiApp Autenticación”)
    • Establezca una Contraseña de Base de Datos (guárdela de manera segura)
    • Seleccione su Región (elige la más cercana a tus usuarios)
    • Haga clic Crear nuevo proyecto
  2. Obtenga las credenciales de su proyecto:

    • Una vez creado, vaya a Configuración > API
    • Copie su URL de proyecto (por ejemplo, https://your-project-ref.supabase.co)
    • Copie su cuenta pública anónima API clave
    • Guarde estos para su uso posterior en la aplicación

Configure la configuración de autenticación

  1. Configuración de autenticación general:

    • Vaya a Autenticación > Configuración
    • Bajo Configuración general:
      • Establecer URL del sitio a la URL de su aplicación (por ejemplo, https://yourdomain.com o http://localhost:3000 para desarrollo)
      • Agregar direcciones URL adicionales Redireccionar a If es necesario:
        http://localhost:3000
        https://yourdomain.com
        capacitor://localhost (for mobile apps)
  2. Configura los ajustes de correo electrónico (opcional pero recomendado):

    • Bajo Ajustes de SMTPConfigura tu proveedor de correo electrónico
    • Esto habilita las confirmaciones de correo electrónico y los restablecimientos de contraseña
    • Para el desarrollo, puedes utilizar el servicio de correo electrónico incorporado

Habilitar Proveedores de Autenticación Social

  1. Accede a la sección de proveedores:
    • Ve a Autenticación > Proveedores en su panel de Supabase
    • Verá una lista de proveedores sociales disponibles
    • Cada proveedor tiene un Habilitar botón de encendido y opciones de configuración

Ahora, configuraremos cada proveedor social en detalle:

Paso 3: Configuración de Proveedores Sociales en Supabase

Configuración de Autenticación de Google en Supabase

Primero, obtenga sus credenciales de OAuth de Google:

Siga nuestra guía de configuración de Google completa: Configuración de Autenticación de Google

Esta guía cubre:

  • Crear un proyecto de Google Cloud
  • Configurando credenciales OAuth 2.0 para web, iOS y Android
  • Configurando la pantalla de consentimiento
  • Obteniendo los Client IDs y secretos requeridos

Después de completar la configuración de Google, configúrela en Supabase:

  1. Habilite el proveedor de Google en Supabase:
    • En su panel de Supabase, vaya a Autenticación > Proveedores
    • Encuentre Google y active el botón ON
    • Rellene la configuración:
      • ID de cliente: Su OAuth de Google Web ID de cliente (de la consola de Google Cloud)
      • Secret de cliente: Su OAuth de Google Web Secret de cliente
      • URL de redireccionamiento: https://your-project-ref.supabase.co/auth/v1/callback (rellenado automáticamente)
    • Haga clic “Guardar”

Importante: Utilice el ID del cliente web y Secreto del cliente web en Supabase, incluso si está construyendo una aplicación móvil. Los IDs de cliente móviles se utilizan por separado en la configuración del complemento.

Configuración de autenticación de Apple en Supabase

Obtenga credenciales de Apple:

Siga nuestra guía detallada de configuración de Apple: Configuración de autenticación de Apple

Esta guía cubre:

  • Configuración de su cuenta de desarrollador de Apple
  • Creación de IDs de aplicación y IDs de servicio
  • Configuración de la capacidad de inicio de sesión con Apple
  • Generación de las claves privadas requeridas
  • Configuración específica de plataforma para iOS, Android y Web

Después de completar la configuración de Apple, configúrela en Supabase:

  1. Habilitar proveedor de Apple en Supabase:
    • Vaya a Autenticación > Proveedores y active Apple ACTIVADO
    • Rellene la configuración:
      • ID de cliente: Su identificador de servicio ID (por ejemplo, com.yourapp.signin)
      • Secreto de cliente: Genere este JWT utilizando su clave privada de Apple (consulte documentación de Apple de Supabase para el formato de JWT)
      • URL de redirección: https://your-project-ref.supabase.co/auth/v1/callback (rellenada automáticamente)
    • Haga clic “Guardar”

Nota: La configuración de autenticación de Apple es la más compleja debido a los requisitos de Apple para IDs de Servicio, claves privadas y generación de JWT. Sigue nuestra documentación cuidadosamente para cada plataforma.

Configuración de autenticación de Facebook en Supabase

Obtén tus credenciales de Facebook:

Sigue nuestra guía de configuración de Facebook completa: Configuración de autenticación de Facebook

Este manual cubre:

  • Crear una cuenta de desarrollador de Facebook y una aplicación
  • Agregar el producto de inicio de sesión de Facebook
  • Configurar URIs de redirección OAuth
  • Obtener tu ID de aplicación, secreto de aplicación y token de cliente
  • Configuración específica de plataforma para iOS y Android

Después de completar la configuración de Facebook, configúrala en Supabase:

  1. Habilite el proveedor de Facebook en Supabase:
    • Vaya a Autenticación > Proveedores y active Facebook HAGÁLO ENCENDIDO
    • Rellene la configuración:
      • ID de cliente: Su ID de aplicación de Facebook
      • ID de cliente secreto: Su secreto de aplicación de Facebook
      • URL de redirección: https://your-project-ref.supabase.co/auth/v1/callback (auto-filled)
    • Haga clic “Guardar”

Importante: Asegúrese de agregar la URL de llamada de retorno de Supabase (https://your-project-ref.supabase.co/auth/v1/callback ) a la configuración de inicio de sesión de Facebook de su aplicación Valida las URIs de inicio de sesión OAuth en la configuración de inicio de sesión de Facebook.

Importantes Notas de configuración de Supabase

Nivel de seguridad de fila (RLS):

  • Después de configurar la autenticación, habilite RLS en sus tablas
  • Ir a Base de datos > Tablas y activar Habilitar RLS para cada tabla
  • Crear políticas para controlar el acceso a los datos en función de usuarios autenticados

Gestión de usuarios:

  • Ver usuarios autenticados en Autenticación > Usuarios
  • Monitorear eventos de autenticación en Autenticación > Registros
  • Configurar plantillas de correo electrónico en Autenticación > Plantillas de correo electrónico

Prueba la configuración:

  • Utilice la herramienta de prueba de autenticación integrada de Supabase
  • Vaya a Autenticación > Usuarios y haga clic en “Invitar a un usuario” para probar los flujos de correo electrónico
  • Verifique la Sección de registros para cualquier error de autenticación

Paso 4: Configure el plugin de inicio de sesión social

Ahora que Supabase está configurado, necesita configurar el plugin de inicio de sesión social con las credenciales correspondientes. Importante: El plugin necesita las credenciales OAuth de los proveedores originales proveedores originales (no de Supabase), mientras que Supabase gestiona la autenticación del lado del servidor.

Cómo Funciona el Flujo de Autenticación

Antes de sumergirse en la configuración, comprenda el flujo:

  1. El plugin se autentica con el proveedor social (Google/Apple/Facebook) de manera nativa
  2. El plugin recibe tokens (token de acceso, token de identidad) del proveedor
  3. Su aplicación envía estos tokens a Supabase utilizando signInWithIdToken()
  4. Supabase valida los tokens con el proveedor y crea una sesión de usuario
  5. Supabase devuelve su propio token JWT para las solicitudes autenticadas de tu aplicación

Configuración del plugin de Google

El plugin necesita tu ID de cliente de cliente web para todas las plataformas y opcionalmente un ID de cliente de iOS para características específicas de iOS:

import { SocialLogin } from '@capgo/capacitor-social-login';

await SocialLogin.initialize({
  google: {
    // Use the same Web Client ID you configured in Supabase
    webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
    
    // Optional: iOS Client ID for iOS-specific features
    iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com',
    
    // Optional: Request offline access for refresh tokens
    mode: 'offline'
  }
});

Puntos clave de Google:

  • Utiliza el ID del cliente web (no IDs de cliente de Android/iOS) para el webClientId campo
  • El plugin funcionará en todas las plataformas con solo el ID del cliente web
  • El iOSClientId es opcional y solo se utiliza para características de Google específicas de iOS

Configuración del plugin de Apple

La configuración de Apple difiere entre iOS y Android:

Para iOS (iniciación nativa de Apple):

await SocialLogin.initialize({
  apple: {
    // No additional configuration needed for iOS
    // The plugin uses the native Apple Sign-In capability
  }
});

Para Android/Web (requiere ID de servicio):

await SocialLogin.initialize({
  apple: {
    clientId: 'YOUR_SERVICE_ID', // The Service ID from Apple Developer Portal
    redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
  }
});

Puntos clave para Apple:

  • iOS utiliza Sign in con Apple nativo (no se necesita configuración adicional)
  • Android/Web requiere el ID de Servicio que creaste en el Portal del Desarrollador de Apple
  • El redirectUrl debe coincidir con lo que configuraste en el Portal del Desarrollador de Apple y Supabase

Configuración del plugin de Facebook

Facebook requiere tu ID de Aplicación y Token de Cliente:

await SocialLogin.initialize({
  facebook: {
    appId: 'YOUR_FACEBOOK_APP_ID',        // From Facebook Developer Dashboard
    clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN', // From Facebook Developer Dashboard
    
    // Optional: Use Facebook Limited Login (for enhanced privacy)
    limitedLogin: false // See our Facebook setup guide for important Limited Login details
  }
});

Puntos clave para Facebook:

  • Utiliza el mismo ID de Aplicación que configuraste en Supabase
  • El Token de Cliente se encuentra en los Ajustes Básicos de tu Aplicación de Facebook
  • limitedLogin: true habilita la característica de inicio de sesión limitado de Facebook, enfocada en la privacidad (solo para iOS)
  • Importante: Vea nuestra Guía de configuración de Facebook para información detallada de inicio de sesión limitado, incluyendo consideraciones de ATT

Inicialización de Plugin Completa

Esto es cómo inicializar todos los proveedores juntos:

import { SocialLogin } from '@capgo/capacitor-social-login';

export async function initializeSocialLogin() {
  await SocialLogin.initialize({
    google: {
      webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
      mode: 'offline'
    },
    facebook: {
      appId: 'YOUR_FACEBOOK_APP_ID',
      clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
    },
    apple: {
      // iOS: no config needed
      // Android/Web: uncomment the lines below
      // clientId: 'YOUR_SERVICE_ID',
      // redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
    }
  });
}

Observaciones importantes:

  • Llame initialize() una vez cuando su aplicación comienza, no antes de cada inicio de sesión
  • Solo necesita configurar los proveedores que planea usar
  • Las credenciales aquí provienen de los proveedores originalesno desde Supabase
  • Asegúrese de que las credenciales del proveedor coincidan con lo que configuró en Supabase

Paso 5: Configuración del cliente de Supabase

Instale el cliente de Supabase:

npm install @supabase/supabase-js

Crear un servicio de Supabase:

// services/supabase.ts
import { createClient } from '@supabase/supabase-js';

const supabaseUrl = 'https://your-project-ref.supabase.co';
const supabaseKey = 'your-anon-public-key';

export const supabase = createClient(supabaseUrl, supabaseKey, {
  auth: {
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  },
});

Paso 6: Implementación del flujo de autenticación

Crear un servicio de autenticación que combine ambos:

// services/auth.ts
import { SocialLogin } from '@capgo/capacitor-social-login';
import { supabase } from './supabase';

export class AuthService {
  
  async initializeSocialLogin() {
    await SocialLogin.initialize({
      google: {
        webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
      },
      facebook: {
        appId: 'YOUR_FACEBOOK_APP_ID',
        clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
      },
      apple: {} // iOS configuration
    });
  }

  async signInWithGoogle() {
    try {
      const result = await SocialLogin.login({
        provider: 'google',
        options: {
          scopes: ['email', 'profile']
        }
      });

      const googleResult = result.result;
      if (!googleResult) {
        throw new Error('Google login failed');
      }

      // GoogleLoginResponse is a union type - check responseType to determine flow
      if (googleResult.responseType === 'online') {
        // Online mode: use idToken directly with Supabase
        const { data, error } = await supabase.auth.signInWithIdToken({
          provider: 'google',
          token: googleResult.idToken!,
        });
        if (error) throw error;
        return data;
      } else {
        // Offline mode: exchange serverAuthCode on your backend
        // Your backend should exchange the code for tokens and create a Supabase session
        const response = await fetch('/api/auth/google', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ serverAuthCode: googleResult.serverAuthCode })
        });
        return response.json();
      }
    } catch (error) {
      console.error('Google sign-in error:', error);
      throw error;
    }
  }

  async signInWithApple() {
    try {
      const result = await SocialLogin.login({
        provider: 'apple',
        options: {
          scopes: ['email', 'name']
        }
      });

      const { data, error } = await supabase.auth.signInWithIdToken({
        provider: 'apple',
        token: result.result?.identityToken!,
      });

      if (error) throw error;
      return data;
    } catch (error) {
      console.error('Apple sign-in error:', error);
      throw error;
    }
  }

  async signInWithFacebook() {
    try {
      const result = await SocialLogin.login({
        provider: 'facebook',
        options: {
          permissions: ['email', 'public_profile']
        }
      });

      const fbResult = result.result;
      if (!fbResult?.accessToken?.token) {
        throw new Error('Facebook login failed - no access token received');
      }

      // Facebook uses accessToken for Supabase authentication
      const { data, error } = await supabase.auth.signInWithIdToken({
        provider: 'facebook',
        token: fbResult.accessToken.token,
      });

      if (error) throw error;
      return data;
    } catch (error) {
      console.error('Facebook sign-in error:', error);
      throw error;
    }
  }

  async signOut() {
    // Sign out from Supabase
    await supabase.auth.signOut();
    
    // Optionally sign out from social providers
    await SocialLogin.logout({
      provider: 'google' // or 'apple', 'facebook'
    });
  }

  getCurrentUser() {
    return supabase.auth.getUser();
  }

  onAuthStateChange(callback: (event: string, session: any) => void) {
    return supabase.auth.onAuthStateChange(callback);
  }
}

export const authService = new AuthService();

Paso 7: Implementación en su aplicación

Inicialice el servicio y maneje la autenticación:

// main.ts or app component
import { authService } from './services/auth';

async function initializeApp() {
  await authService.initializeSocialLogin();
  
  // Listen to auth state changes
  authService.onAuthStateChange((event, session) => {
    if (event === 'SIGNED_IN') {
      console.log('User signed in:', session.user);
      // Redirect to authenticated area
    } else if (event === 'SIGNED_OUT') {
      console.log('User signed out');
      // Redirect to login
    }
  });
}

initializeApp();

Crear botones de inicio de sesión en su interfaz de usuario:

// Login component
async function handleGoogleLogin() {
  try {
    const user = await authService.signInWithGoogle();
    console.log('Signed in with Google:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleAppleLogin() {
  try {
    const user = await authService.signInWithApple();
    console.log('Signed in with Apple:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleFacebookLogin() {
  try {
    const user = await authService.signInWithFacebook();
    console.log('Signed in with Facebook:', user);
  } catch (error) {
    console.error('Login failed:', error);
  }
}

async function handleLogout() {
  try {
    await authService.signOut();
    console.log('Signed out successfully');
  } catch (error) {
    console.error('Logout failed:', error);
  }
}

Paso 8: Configuración específica de plataforma

Configuración de iOS

For más detalles sobre la configuración de iOS, consulte nuestras guías específicas de plataforma:

Resumen rápido - Agregar a ios/App/App/Info.plist:

<!-- Google Sign-In URL scheme -->
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>YOUR_REVERSED_CLIENT_ID</string>
    </array>
  </dict>
</array>

<!-- Apple Sign-In capability -->
<key>com.apple.developer.applesignin</key>
<array>
  <string>Default</string>
</array>

Siga las guías vinculadas para obtener instrucciones completas de configuración de iOS, incluida la configuración del proyecto de Xcode.

Configuración de Android

Para obtener instrucciones detalladas de configuración de Android, consulte nuestras guías específicas de plataforma:

Configuración de Android básica:

1. Obtenga su huella digital SHA-1 (requerido para Google):

# For debug builds (development)
cd android
./gradlew signingReport

# Look for the SHA1 fingerprint under "Variant: debug"
# Add this SHA1 to your Google Cloud Console Android OAuth client

2. Configure AndroidManifest.xml - Agregar a android/app/src/main/AndroidManifest.xml:

<!-- Internet permission -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- Facebook configuration -->
<meta-data 
  android:name="com.facebook.sdk.ApplicationId" 
  android:value="@string/facebook_app_id"/>
<meta-data 
  android:name="com.facebook.sdk.ClientToken" 
  android:value="@string/facebook_client_token"/>

3. Agregar recursos de Facebook a android/app/src/main/res/values/strings.xml:

<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>

Sigue las guías de la plataforma vinculada para una configuración de Android completa, incluyendo la configuración de servicios de Google Play y el nombre de paquete.

Paso 9: Usar la base de datos de Supabase con usuarios autenticados

Una vez que los usuarios estén autenticados, puedes usar la base de datos de Supabase con seguridad de nivel de fila (RLS):

// Example: Fetch user profile
async function getUserProfile() {
  const { data: user } = await supabase.auth.getUser();
  
  if (user) {
    const { data, error } = await supabase
      .from('profiles')
      .select('*')
      .eq('id', user.user.id)
      .single();
    
    return data;
  }
}

// Example: Update user profile
async function updateUserProfile(updates: any) {
  const { data: user } = await supabase.auth.getUser();
  
  if (user) {
    const { data, error } = await supabase
      .from('profiles')
      .update(updates)
      .eq('id', user.user.id);
    
    return data;
  }
}

Consideraciones de seguridad importantes

  1. Jamás expongas claves sensibles en tu cliente code
  2. Usa variables de entorno para la configuración
  3. Habilita la seguridad de nivel de fila en Supabase
  4. Validar tokens en su servidor backend si es necesario
  5. Gestionar la refresco de tokens automáticamente con Supabase

Resolución de Problemas Comunes

Errores de Coincidencia de Tokens

  • Asegúrese de que las configuraciones de su proveedor de OAuth coincidan entre el plugin de inicio de sesión social y Supabase
  • Verifique que las URL de redirección estén configuradas correctamente

Problemas Específicos de Plataforma

  • iOS: Verifique que su ID de paquete coincida con su configuración de desarrollador de Apple
  • Android: Asegúrese de que las huellas SHA1 estén agregadas correctamente a Google Console

Interrupciones del flujo de autenticación

  • Implementar un manejo adecuado de errores para problemas de red
  • Agregar estados de carga durante la autenticación

Conclusión

Ahora tienes un sistema de autenticación completo que combina el backend robusto de Supabase con capacidades de inicio de sesión social nativa. Esta configuración proporciona:

  • Autenticación social segura y nativa
  • Gestión de tokens suave
  • Integración de base de datos en tiempo real
  • Compatibilidad cruzada de plataformas

La combinación de Supabase y el plugin de inicio de sesión social de Capgo ofrece una solución de autenticación poderosa y escalable para tus Capacitor aplicaciones.

Para características avanzadas como autenticación multifactor o reivindicaciones personalizadas , consulte la documentación deSupabase y la documentación del plugin de inicio de sesión social Siga adelante desde Configuración de autenticación de Supabase con el plugin de inicio de sesión social __CAPGO_KEEP_0__ Si está utilizando.

Configuración de autenticación de Supabase con el plugin de inicio de sesión social Capacitor

para planificar la autenticación y los flujos de cuenta, conecte con @Capacitor/__CAPGO_KEEP_1__-social-login para obtener detalles de implementación en @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-social-login @capgo/capacitor-social-login for the implementation detail in @capgo/capacitor-social-login, clave de acceso @capgo/capacitor para detalles de implementación en clave de acceso @capgo/capacitor autenticación biométrica nativa @capgo/capacitor para detalles de implementación en autenticación biométrica nativa @capgo/capacitor autenticación de dos factores para detalles de implementación en autenticación de dos factores y SSO (Empresas) para detalles de implementación en SSO (Empresas).

Actualizaciones en vivo para aplicaciones Capacitor

Cuando un error de bug en la capa web está activo, envía la corrección a través de Capgo en lugar de esperar días para la aprobación de la tienda de aplicaciones. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen en el camino de revisión normal.

Comienza ahora

Últimas noticias de nuestro Blog

Capgo te da las mejores perspectivas que necesitas para crear una aplicación móvil verdaderamente profesional.