Vai direttamente al contenuto principale
Tutorial

Configurazione dell'autenticazione Supabase con il plugin di accesso sociale Capacitor

Impara a integrare l'autenticazione Supabase con il plugin di accesso sociale Capgo per un'esperienza di autenticazione senza intoppi con Google, Apple e Facebook nel tuo Capacitor app.

Martin Donadieu

Martin Donadieu

Responsabile del contenuto

Configurazione dell'autenticazione Supabase con il plugin di accesso sociale Capacitor

La configurazione dell'autenticazione nei dispositivi mobili può essere complessa, ma combinando Supabase con il Capgo Social Login plugin rende tutto più semplice. Questo tutorial ti guiderà attraverso l'integrazione dell'autenticazione sociale (Google, Apple, Facebook) con Supabase nel tuo Capacitor app.

Perché Usare Supabase con Social Login?

Supabase fornisce un backend-as-a-service robusto con autenticazione integrata, mentre il @capgo/capacitor-social-login plugin offre un'autenticazione sociale nativa su piattaforme iOS, Android e web. Insieme, forniscono:

  • Autenticazione sociale senza problemi
  • Gestione sicura dei token
  • Compatibilità cross-platform
  • Integrazione della database in tempo reale
  • Gestione degli utenti integrata

Requisiti preliminari

Prima di iniziare, assicurati di avere:

  • Un progetto Capacitor configurato
  • Un account e un progetto Supabase
  • Account di sviluppatore per i tuoi provider social scelti (Google, Apple, Facebook)

Passo 1: Installare e configurare il plugin di accesso sociale

Installa per primo il plugin di accesso sociale Capgo:

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

Passo 2: Configurazione del progetto Supabase

Crea e configura il tuo progetto Supabase

  1. Crea un progetto Supabase:

    • Vai a supabase.com e registrati/accedi
    • Clicca “Nuovo Progetto”
    • Scegli la tua organizzazione
    • Inserisci un Nome del Progetto (ad esempio, “MyApp Auth”)
    • Imposta una Password del Database (salva questo in modo sicuro)
    • Scegli la tua Regione (scegli quella più vicina ai tuoi utenti)
    • Clicca “Crea un nuovo progetto”
  2. Ottieni le credenziali del tuo progetto:

    • Una volta creato, vai a Impostazioni > API
    • Copia il tuo URL del progetto (ad esempio, https://your-project-ref.supabase.co)
    • Copia il tuo indirizzo pubblico anonimo API chiave
    • Salva queste per un uso futuro nel tuo app

Configura Impostazioni di Autenticazione

  1. Configura le impostazioni di autenticazione generali:

    • Vai a Autenticazione > Impostazioni
    • Sotto Impostazioni generali:
      • Imposta URL del sito sul tuo URL dell'app (ad esempio https://yourdomain.com o http://localhost:3000 per lo sviluppo
      • Aggiungi ulteriori Indirizzi di reindirizzamento se necessario:
        http://localhost:3000
        https://yourdomain.com
        capacitor://localhost (for mobile apps)
  2. Configura le impostazioni del posta elettronica (facoltativo ma consigliato):

    • Sotto Impostazioni SMTP, configura il tuo provider di posta elettronica
    • Abilita le conferme di posta elettronica e i reset delle password
    • Per lo sviluppo, puoi utilizzare il servizio di posta elettronica integrato

Abilita i provider di autenticazione sociale

  1. Accedi alla sezione dei provider:
    • Vai a Autenticazione > Provider nella tua dashboard Supabase
    • Vedrai una lista dei provider social disponibili
    • Ogni provider ha un Abilita interruttore e opzioni di configurazione

Ora configuriamo ogni provider sociale in dettaglio:

Passo 3: Configura i Provider Social in Supabase

Configurazione dell'autenticazione Google in Supabase

Prima, ottieni le tue credenziali OAuth Google:

Segui la nostra guida dettagliata di configurazione Google: Configurazione dell'autenticazione Google

Questa guida copre:

  • Creare un progetto Google Cloud
  • Configurare le credenziali OAuth 2.0 per web, iOS e Android
  • Configurare lo schermo di consenso
  • Ottenere gli ID client e le chiavi richiesti

Dopo aver completato la configurazione di Google, configuralo in Supabase:

  1. Abilita il provider Google in Supabase:
    • Nella tua dashboard di Supabase, vai a Autenticazione > Provider
    • Trova Google e attivalo ATTIVO
    • Compila la configurazione:
      • ID del client: Il tuo Google OAuth Web ID del client (dal Cloud Console di Google)
      • Segreto del client: Il tuo Google OAuth Web Segreto del client
      • URL di reindirizzamento: https://your-project-ref.supabase.co/auth/v1/callback (riempito automaticamente)
    • Clicca “Salva”

Importante: Utilizza il ID del Client Web e Segreto del Client Web in Supabase, anche se stai creando un'app mobile. Gli ID dei clienti mobili vengono utilizzati separatamente nella configurazione del plugin.

Configurazione dell'autenticazione Apple in Supabase

Ottieni le credenziali Apple:

Segui la nostra guida dettagliata di configurazione Apple: Configurazione dell'autenticazione Apple

Questa guida copre:

  • Configurazione del tuo account Apple Developer
  • Creazione degli ID App e degli ID Servizio
  • Configurazione della capacità di accesso con Apple
  • Generazione delle chiavi private richieste
  • Configurazione specifica per piattaforma per iOS, Android e Web

Dopo aver completato la configurazione Apple, configurala in Supabase:

  1. Abilita il provider Apple in Supabase:
    • Vai a Autenticazione > Provider e attiva Apple ON
    • Compila la configurazione:
      • ID del client: Il tuo identificatore di servizio ID (ad esempio, com.yourapp.signin)
      • Segreto del client: Genera questo JWT utilizzando la tua chiave privata Apple (vedi Supabase Apple docs per il formato JWT)
      • URL di reindirizzamento: https://your-project-ref.supabase.co/auth/v1/callback (riempito automaticamente)
    • Clicca “Salva”

Nota: la configurazione dell'autenticazione Apple è la più complessa a causa delle richieste di Apple per gli ID Servizio, le chiavi private e la generazione di JWT. Segui attentamente la nostra documentazione per ogni piattaforma.

Configurazione dell'autenticazione Facebook in Supabase

Otieni le credenziali Facebook:

Segui la nostra guida completa di configurazione Facebook: Configurazione dell'autenticazione Facebook

Questa guida copre:

  • Creazione di un account sviluppatore Facebook e app
  • Aggiunta del prodotto di accesso Facebook
  • Configurazione degli URI di reindirizzamento OAuth
  • Ottieni il tuo ID App, Segreto App e Token Client
  • Configurazione specifica per piattaforma per iOS e Android

Dopo aver completato la configurazione di Facebook, configuralo in Supabase:

  1. Abilita il provider Facebook in Supabase:
    • Vai a Autenticazione > Provider e attiva Facebook ATTIVATO
    • Riempi le informazioni di configurazione:
      • ID Client:Il tuo ID App Facebook
      • Segreto Client:Il tuo Segreto App Facebook
      • URL di reindirizzamento: https://your-project-ref.supabase.co/auth/v1/callback (compilato automaticamente)
    • Clicca “Salva”

Importante: Assicurati di aggiungere l'URL di callback di Supabase (https://your-project-ref.supabase.co/auth/v1/callback) alle impostazioni dell'app Facebook ' URI di reindirizzamento OAuth valide nelle impostazioni di accesso Facebook.

Nota importante sulla configurazione di Supabase

Livello di sicurezza per riga (RLS):

  • Dopo aver configurato l'autenticazione, abilita RLS sulle tue tabelle
  • Vai a Database > Tabelle e abilita Abilita RLS per ogni tabella
  • Crea politiche per controllare l'accesso ai dati in base agli utenti autenticati

Gestione degli utenti:

  • Visualizza gli utenti autenticati in Autenticazione > Utenti
  • Monitora gli eventi di autenticazione in Autenticazione > Log
  • Configura i modelli di email in Autenticazione > Modelli di Email

Testare la Configurazione:

  • Utilizzare lo strumento di test di autenticazione integrato di Supabase
  • Andare a Autenticazione > Utenti e cliccare su “Invita l'utente” per testare i flussi di email
  • Controllare la Sezione dei Log per eventuali errori di autenticazione

Passo 4: Configurare il Plugin di Accesso Social

Ora che Supabase è configurato, è necessario configurare il plugin di accesso sociale con le credenziali corrispondenti. Importante: Il plugin richiede le credenziali OAuth dai provider originali (non da Supabase), mentre Supabase gestisce l'autenticazione server-side.

Come Funziona il Flusso di Autenticazione

Prima di immergersi nella configurazione, comprendere il flusso:

  1. Il plugin si autentica con il provider sociale (Google/Apple/Facebook) nativamente
  2. Il plugin riceve i token (token di accesso, token ID) dal provider
  3. La tua app invia questi token a Supabase usando signInWithIdToken()
  4. Supabase verifica i token con il provider e crea una sessione utente
  5. Supabase restituisce il proprio token JWT per le richieste autenticate del tuo app

Configurazione del plugin Google

Il plugin richiede il tuo ID del client Web per tutte le piattaforme e optionalmente un ID del client iOS per le funzionalità specifiche di 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'
  }
});

Punti chiave per Google:

  • Usa il ID del Client Web (non ID dei clienti Android/iOS) per il webClientId campo
  • Il plugin funzionerà su tutte le piattaforme con solo l'ID del Client Web
  • Il iOSClientId è facoltativo e viene utilizzato solo per le funzionalità di Google specifiche per iOS

Configurazione del Plugin Apple

La configurazione di Apple differisce tra iOS e Android:

Per iOS (Apple Sign-In nativo):

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

Per Android/Web (richiede ID Servizio):

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'
  }
});

Punti chiave per Apple:

  • iOS utilizza l'accesso nativo con Apple (nessuna configurazione aggiuntiva necessaria)
  • Per Android/Web è necessario l'ID Servizio che hai creato nel portale dello sviluppatore Apple
  • Il redirectUrl dovrebbe corrispondere a quanto configurato in entrambi il portale dello sviluppatore Apple e Supabase

Configurazione Plugin Facebook

Facebook richiede il tuo ID App e Token Client:

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
  }
});

Punti chiave per Facebook:

  • Utilizza lo stesso ID App che hai configurato in Supabase
  • Il Token Client si trova nelle impostazioni base del tuo App Facebook
  • limitedLogin: true abilita la funzione di accesso limitato di Facebook, focalizzata sulla privacy (disponibile solo su iOS)
  • Importante: Vedi il nostro guida di configurazione di Facebook per informazioni dettagliate sul login limitato, incluso il considerare le impostazioni ATT

Inizializzazione del Plugin Completa

Ecco come inizializzare tutti i provider insieme:

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'
    }
  });
}

Nota Importante:

  • Chiamare initialize() una volta quando il tuo app inizia, non prima di ogni login
  • Hai bisogno di configurare solo i provider che pianifichi di utilizzare
  • I credenziali qui sono da provider originali, non da Supabase
  • Assicurati che le credenziali del provider corrispondano a quelle configurate in Supabase

Passo 5: Configura il Client di Supabase

Installa il client di Supabase:

npm install @supabase/supabase-js

Crea un servizio di 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,
  },
});

Passo 6: Implementa il Flusso di Autenticazione

Crea un servizio di autenticazione che combina entrambi:

// 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();

Passo 7: Implementa nel Tuo App

Inizializza il servizio e gestisci l'autenticazione:

// 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();

Crea pulsanti di accesso nella tua UI:

// 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);
  }
}

Passo 8: Configurazione Specifica per Piattaforma

Configurazione iOS

Per ulteriori istruzioni di configurazione iOS dettagliate, consulta le nostre guide specifiche per la piattaforma:

Riepilogo rapido - Aggiungi 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>

Segui le guide correlate per le istruzioni di configurazione iOS complete, compresa la configurazione del progetto Xcode.

Configurazione Android

Per ulteriori istruzioni di configurazione Android dettagliate, consulta le nostre guide specifiche per il platform:

Configurazione Android essenziale:

1. Ottieni la tua impronta SHA-1 (richiesta per 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. Configura AndroidManifest.xml - Aggiungi 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. Aggiungi risorse di 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>

Segui le guide dei singoli platform per una configurazione completa di Android, inclusa la configurazione di Google Play Services e del nome del pacchetto.

Passo 9: Utilizzo del database Supabase con utenti autenticati

Una volta autenticati gli utenti, puoi utilizzare il database di Supabase con la sicurezza di livello di riga (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;
  }
}

Considerazioni di sicurezza importanti

  1. Non esporre mai le chiavi sensibili nel tuo client code
  2. Utilizza le variabili di ambiente per la configurazione
  3. Abilita la sicurezza a livello di riga in Supabase
  4. Verifica i token nel tuo backend se necessario
  5. Gestisci il rinnovo dei token automaticamente con Supabase

Risoluzione dei Problemi Comuni

Errori di Mancanza di Token

  • Assicurati che le configurazioni del tuo provider OAuth siano coerenti tra il plugin di accesso sociale e Supabase
  • Verifica che gli URL di reindirizzamento siano configurati correttamente

Problemi Specifici della Piattaforma

  • iOS: Verifica che il tuo ID bundle corrisponda alla tua configurazione del Developer Apple
  • Android: Assicurati di aggiungere correttamente le impronte SHA1 al Console di Google

Interruzioni del Flusso di Autenticazione

  • Implementa un corretto gestione degli errori per le questioni di rete
  • Aggiungi stati di caricamento durante l'autenticazione

Conclusioni

Ora hai un sistema di autenticazione completo che combina il backend robusto di Supabase con le capacità di login sociale native. Questo setup fornisce:

  • Autenticazione sociale nativa sicura
  • Gestione dei token senza problemi
  • Integrazione della base di dati in tempo reale
  • Compatibilità multi-piattaforma

La combinazione di Supabase e il plugin di login sociale Capgo di Capgo offre una soluzione di autenticazione potente e scalabile per le tue Capacitor app.

Per più funzionalità avanzate come autenticazione a più fattori o asserzioni personalizzate, scopri di più nel documentazione di Supabase e nella documentazione del plugin di accesso sociale.

Aggiornamenti in tempo reale per le app Capacitor

Quando un bug del layer web è attivo, invia la correzione attraverso Capgo invece di attendere giorni per l'approvazione della store. Gli utenti ricevono l'aggiornamento in background mentre le modifiche native rimangono nel normale percorso di revisione.

Inizia subito

Ultimi articoli dal nostro Blog

Capgo ti offre le migliori informazioni che ti servono per creare un'app mobile veramente professionale.