Supabase Google Login - Configuration générale
Copiez un prompt de configuration incluant les étapes d'installation et le guide markdown complet pour ce plugin.
Introduction
Section intitulée « Introduction »Ce guide vous accompagne dans l'intégration de Google Sign-In avec Supabase Authentication en utilisant le plugin Social Login de Capacitor. Cette configuration vous permet d'utiliser le Google Sign-In natif sur les plateformes mobiles tout en exploitant Supabase Auth pour l'authentification backend.
Prerequisites
Section intitulée « Prérequis »Avant de commencer, assurez-vous d'avoir :
-
Lu le Configuration générale de Google Login guide pour configurer les identifiants Google OAuth
-
Suivi les guides spécifiques à chaque plateforme pour configurer les identifiants Google OAuth pour votre plateforme cible :
Activer le fournisseur Google OAuth dans Supabase
Section intitulée « Activer le fournisseur Google OAuth dans Supabase »-
Allez sur votre dashboard Supabase
-
Cliquez sur votre projet
-
Allez dans le
Authenticationmenu
-
Cliquez sur le
Providersonglet
-
Trouvez le
Googleprovider
-
Activer le provider
-
Ajoutez les client IDs pour les plateformes que vous comptez utiliser
-
Cliquez sur le
Savebouton
Et voilà, vous avez maintenant activé la connexion Google avec Supabase Authentication 🎉
Fonctionnement de Google Sign-In avec le Supabase Authentication Helper
Section intitulée « Fonctionnement de l'assistant Google Sign-In avec Supabase Authentication »Cette section explique le fonctionnement interne de l'intégration Google Sign-In avec Supabase. Comprendre ce flux vous aidera à implémenter et à dépanner le processus d'authentification.
1. Génération du nonce
Section intitulée « 1. Génération du nonce »L'implémentation génère une paire de nonce sécurisée en suivant les exigences 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 };}Flux :
rawNonce: chaîne aléatoire URL-safe (64 caractères hexadécimaux)nonceDigest: hash SHA-256 derawNonce(hex-encoded)nonceDigestest transmis à Google Sign-In → Google inclut l'empreinte du nonce dans l'ID tokenrawNonceest transmis à Supabase → Supabase calcule le hash du nonce brut et le compare au nonce du token
2. Connexion avec Google
Section intitulée « 2. Google Sign-In »La fonction initialise le plugin et se connecte avec 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. Validation du JWT
Section intitulée « 3. Validation JWT »Avant d'envoyer le token à Supabase, l'implémentation valide le 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 };}Pourquoi valider avant Supabase ?
Valider le token JWT avant de l'envoyer à Supabase répond à plusieurs objectifs importants :
-
Éviter les requêtes invalides: Si le token possède une audience incorrecte ou un nonce non conforme, Supabase rejettera le token de toute façon. Valider en amont évite des appels API inutiles et fournit des messages d'erreur plus clairs.
-
Problèmes de cache de token: Sur certaines plateformes (notamment iOS), le SDK de Google Sign-In peut mettre les tokens en cache pour améliorer les performances. Lorsqu'un token mis en cache est renvoyé, il peut avoir été généré avec un nonce différent (ou sans nonce du tout), ce qui amène Supabase à rejeter le token avec une erreur de « nonce mismatch ». En validant avant l'envoi à Supabase, nous pouvons détecter ce problème tôt et réessayer automatiquement avec un token frais.
-
Sécurité (iOS) : Sur iOS, la validation garantit que le token a été émis pour vos Google Client IDs spécifiques, évitant ainsi des problèmes de sécurité potentiels liés à l'utilisation de tokens destinés à d'autres applications.
-
Meilleure gestion des erreurs: La détection des problèmes avant Supabase permet d'implémenter une logique de retry automatique, essentielle pour gérer les problèmes de cache iOS de manière transparente.
Si la validation échoue, la fonction effectue automatiquement :
- Déconnexion de Google (supprime les tokens en cache – critique sur iOS)
- Nouvelle tentative d'authentification (force la génération d'un nouveau token avec le bon nonce)
- If retry also fails, returns an error
4. Connexion à Supabase
Section intitulée « 4. Connexion Supabase »Enfin, le token validé est envoyé à Supabase :
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Référence Code complète
Section intitulée « Référence complète Code »L'implémentation complète est disponible dans le fichier de l'application d'exemple. supabaseAuthUtils.ts fichier, qui inclut :
getUrlSafeNonce()- Génère un nonce aléatoire compatible URLsha256Hash()- Hash la chaîne avec SHA-256getNonce()- Génère une paire de noncesdecodeJWT()- Décode le token JWTvalidateJWTToken()- Valide l'audience et le nonce du JWTauthenticateWithGoogleSupabase()- Fonction d'authentification principale avec retry automatique
Fichiers d'exemple supplémentaires
Section intitulée « Fichiers d'exemples supplémentaires »- SupabasePage.tsx - Composant d'exemple avec gestion de la redirection (Web)
- SupabaseCreateAccountPage.tsx - Exemple de page de création de compte
Étapes suivantes
Section intitulée « Étapes suivantes »Veuillez consulter le guide de configuration spécifique à votre plateforme cible :
Continuer depuis Supabase Google Login - Configuration générale
Section intitulée « Keep going from Supabase Google Login - General Setup »Si vous utilisez Supabase Google Login - Configuration générale pour planifier les flux d'authentification et de compte, le connecter à Utiliser @capgo/capacitor-social-login pour la capacité native dans Utiliser @capgo/capacitor-social-login @capgo/capacitor-social-login pour les détails d'implémentation dans @capgo/capacitor-social-login @capgo/capacitor-passkey pour les détails d'implémentation dans @capgo/capacitor-passkey @capgo/capacitor-native-biometric pour les détails d'implémentation dans @capgo/capacitor-native-biometric, et Authentification à deux facteurs pour les détails d'implémentation de l'authentification à deux facteurs.