Configurare l'autenticazione negli app mobili può essere complesso, ma combinando Supabase con il Capgo Plugin di accesso sociale rende tutto più semplice. Questo tutorial vi guiderà attraverso l'integrazione dell'autenticazione sociale (Google, Apple, Facebook) con Supabase nella vostra app Capacitor.
Perché Usare Supabase con l'Accesso Sociale?
Supabase fornisce un backend come servizio robusto con autenticazione integrata, mentre il @capgo/capacitor-social-login plugin offre un'autenticazione sociale nativa su piattaforme iOS, Android e web. Per un'integrazione Supabase più stretta, @capgo/capacitor-supabase aggiunge aiuti di autenticazione nativa e accesso JWT. Insieme, forniscono:
- Autenticazione sociale senza intoppi
- Gestione sicura dei token
- Compatibilità multi-piattaforma
- Integrazione del database in tempo reale
- Gestione degli utenti integrata
Requisiti preliminari
Prima di iniziare, assicurati di avere:
- Un progetto Capacitor configurato
- Un account e progetto Supabase
- Account di sviluppatore per i tuoi provider social scelti (Google, Apple, Facebook)
Passo 1: Installare e configurare il plugin di accesso sociale
Prima di tutto, installa il plugin di accesso sociale Capgo:
npm install @capgo/capacitor-social-login
npx cap sync
Vedi il Login sociale e plugin Supabase per la configurazione specifica della piattaforma. Passo 2: Configura il progetto Supabase
Creare e configurare il tuo progetto Supabase
Creare un progetto Supabase
-
Vai a:
- supabase.com e iscriviti/accedi Clicca
- su “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)
- Seleziona la Regione (scegli quella più vicina ai tuoi utenti)
- Clicca Crea nuovo progetto
-
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 chiave pubblica anonima API
- Salva queste informazioni per usarle in seguito nel tuo app
Configura le impostazioni di autenticazione
-
Configura le impostazioni di autenticazione generali:
- Vai a Autenticazione > Impostazioni
- Sotto Impostazioni generali:
- Imposta URL del sito a quello del tuo app (ad esempio,
https://yourdomain.comohttp://localhost:3000per lo sviluppo) - Aggiungi indirizzi di reindirizzamento aggiuntivi o se necessario:
http://localhost:3000 https://yourdomain.com capacitor://localhost (for mobile apps)
- Imposta URL del sito a quello del tuo app (ad esempio,
-
Configura le impostazioni di posta (facoltativo ma consigliato):
- Sotto Impostazioni SMTP, configura il tuo provider di posta
- Questo abilita le conferme di posta e i reset delle password
- Per lo sviluppo, puoi utilizzare il servizio di posta integrato
Abilita i Provider di Autenticazione Sociale
- Accedi alla sezione dei provider:
- Vai a Autenticazione > Provider Inizia nel tuo dashboard di Supabase
- Vedrai una lista dei provider social disponibili
- Ogni provider ha un Abilita un pulsante e opzioni di configurazione
Ora configuriamo ogni provider social in dettaglio:
Passo 3: Configura i provider social in Supabase
Configurazione dell'autenticazione Google in Supabase
Prima, ottieni le tue credenziali OAuth di Google:
Segui la nostra guida completa 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:
- Abilitare il provider Google in Supabase:
- Nella tua dashboard di Supabase, vai a Autenticazione > Provider
- Cerca Google e attivalo ON
- Compilare la configurazione:
- ID del client: Il tuo Google OAuth Web ID del client (dal Google Cloud Console)
- 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”
ImportanteUtilizza il ID del Client Web e Segreto del Client Web in Supabase, anche se stai costruendo un'app mobile. Gli ID dei client mobili vengono utilizzati separatamente nella configurazione del plugin.
Configurazione dell'autenticazione Apple in Supabase
Otieni le credenziali Apple:
Segui la nostra guida dettagliata per l'impostazione Apple: Configurazione dell'autenticazione Apple
Questa guida copre:
- Configurazione del tuo account di sviluppatore Apple
- 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 di Apple, configurala in Supabase:
- Abilita il provider Apple in Supabase:
- Vai a Autenticazione > Provider e attiva Apple ON
- Compilare 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 documentazione Apple di Supabase per il formato JWT)
- URL di reindirizzamento:
https://your-project-ref.supabase.co/auth/v1/callback(riempito automaticamente)
- ID del client: Il tuo identificatore di servizio ID (ad esempio,
- Clicca “Salva”
Nota: La configurazione di 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
Ottenere le credenziali Facebook:
Segui la nostra guida completa per la 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 Facebook, configurala in Supabase:
- Abilita il provider Facebook in Supabase:
- Vai a Autenticazione > Provider e attiva Facebook ATTIVO
- Riempi i dati di configurazione:
- ID del client: Il tuo ID dell'applicazione Facebook
- Segreto del client: Il tuo segreto dell'applicazione Facebook
- URL di reindirizzamento:
https://your-project-ref.supabase.co/auth/v1/callback(auto-filled)
- Clicca “Salva”
ImportanteVerifica di aggiungere l'URL di callback di Supabase (https://your-project-ref.supabase.co/auth/v1/callback) alle impostazioni del tuo app Facebook: Valid OAuth Redirect URIs in Impostazioni Facebook Login.
Important Notes di 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
- Creare politiche per controllare l'accesso ai dati in base agli utenti autenticati
Gestione degli utenti:
- Visualizza gli utenti autenticati in Gestione dell'autenticazione:
- Visualizza gli eventi di autenticazione in Gestione dell'autenticazione > Log
- Configura i modelli di email in Gestione dell'autenticazione > Modelli di email
Verifica la configurazione:
- Usa l' strumento di test di autenticazione integrato di Supabase
- Vai a Autenticazione > Utenti e clicca su “Invita utente” per testare le flussi di posta elettronica
- Controlla la Sezione dei log per eventuali errori di autenticazione
Passo 4: Configura il plugin di accesso sociale
Ora che Supabase è configurato, devi configurare il plugin di accesso sociale con le credenziali corrispondenti. E' importante: Il plugin richiede le credenziali OAuth dalle provider originali (non da Supabase), mentre Supabase gestisce l'autenticazione server-side.
Ecco come funziona il flusso di autenticazione
Prima di immergersi nella configurazione, comprendi il flusso:
- Plugin autentica con il provider sociale (Google/Apple/Facebook) nativamente
- Plugin riceve i token (token di accesso, token ID) dal provider
- La tua app invia questi token a Supabase utilizzando
signInWithIdToken() - Supabase verifica i token con il provider e crea una sessione utente
- Supabase restituisce il suo token JWT per le richieste autenticate dell'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 client Android/iOS) per il
webClientIdcampo - 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 (autenticazione nativa Apple Sign-In):
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)
- Android/Web richiede l'ID Servizio che hai creato nel Portale dello Sviluppatore Apple
- La
redirectUrldeve corrispondere a quanto configurato in entrambi il Portale dello Sviluppatore Apple e Supabase
Configurazione del 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
- Token Client si trova nelle Impostazioni Base del tuo App Facebook
limitedLogin: trueabilita la funzione di login limitato di Facebook, focalizzata sulla privacy (disponibile solo su iOS)- Importante: Vedi il nostro Facebook setup guide per informazioni dettagliate sul login limitato, incluso le considerazioni per l'accesso
Completa l'inizializzazione del plugin
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()context: Chiamare una volta, non prima di ogni accesso, quando il tuo app inizia, non prima di ogni login una volta - quando il tuo app inizia, non prima di ogni login
- Sei necessario configurare solo i provider che intendi utilizzare Il credenziali qui riportate sono quelle degli originali providernon da Supabase
- Assicurati che i 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 per iOS
Istruzioni di configurazione iOS dettagliate, vedi le nostre guide specifiche per piattaforma:
- Istruzioni di configurazione iOS di Google - URL schemes, configurazione di Info.plist
- Istruzioni di configurazione iOS di Apple - Configurazione della capacità di accesso con Apple
- Istruzioni di configurazione iOS di Facebook (guida Facebook generale) - Configurazione di Facebook SDK
Riepilogo rapido - Aggiungi 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>
Segui le guide collegati per le istruzioni di configurazione iOS complete, compresa la configurazione del progetto Xcode.
Istruzioni di configurazione Android
Istruzioni di configurazione dettagliate per Android, vedi le nostre guide specifiche per il tuo platform:
- Configurazione di Android di Google - impronte SHA-1, configurazione dei servizi di Google Play
- Configurazione di Android di Apple - configurazione dell'ID del servizio per Android
- Configurazione di Android di Facebook (guida Facebook in generale) - integrazione di Facebook SDK
Configurazione di 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 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 relative al singolo platform per completare la configurazione Android, inclusa la configurazione di Google Play Services e la configurazione del nome del pacchetto.
Passo 9: Utilizzo del database Supabase con utenti autenticati
Una volta autenticati gli utenti, puoi utilizzare il database 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
- Non esporre mai le chiavi sensibili in il tuo client code
- Utilizza le variabili di ambiente per la configurazione
- Abilita la sicurezza di livello di riga In Supabase
- Valida i token se necessario sul tuo backend
- Gestisci il rinnovo dei token automaticamente con Supabase
Risolvere Problemi Comuni
Errori di Mancanza di Token
- Assicurati che le configurazioni del provider OAuth siano compatibili tra il plugin di accesso sociale e Supabase
- Verifica che gli URL di reindirizzamento siano configurati correttamente
Problemi Specifici per Piattaforma
- iOS: Verifica che l'ID del bundle corrisponda alla configurazione del tuo sviluppatore Apple
- Android: Assicurati che i fingerprint SHA1 siano aggiunti correttamente al Console di Google
Flussi di autenticazione interrotti
- Implementare un gestione degli errori adeguata per le questioni di rete
- Aggiungere 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. Questa configurazione fornisce:
- Autenticazione sociale nativa sicura
- Gestione dei token senza intoppi
- Integrazione del database in tempo reale
- Compatibilità multi-piattaforma
La combinazione di Supabase e il plugin di login sociale Capgo offre una soluzione di autenticazione potente e scalabile per le tue Capacitor app.
Per funzionalità avanzate come autenticazione a fattore multipla o richieste di autenticazione personalizzatescopri di più sul la documentazione di Supabase e la la documentazione del plugin di accesso sociale.
Continua con la configurazione dell'autenticazione Supabase con il plugin di accesso sociale Capacitor
Se stai utilizzando la configurazione dell'autenticazione Supabase con il plugin di accesso sociale Capacitor per pianificare l'autenticazione e le flussi di account, connettilo con @capgo/capacitor-accesso-sociale per i dettagli di implementazione in @capgo/capacitor-accesso-sociale @capgo/capacitor-passkey per i dettagli di implementazione in @capgo/capacitor-passkey @capgo/capacitor-native-biometric per i dettagli di implementazione in @capgo/capacitor-native-biometric Autenticazione a due fattori per i dettagli di implementazione in Autenticazione a due fattori, e SSO (azienda) per i dettagli di implementazione in SSO (azienda).