Connexion Google Supabase sur iOS
Introduction
Section titled “Introduction”Ce guide vous aidera à intégrer la connexion Google avec l’authentification Supabase sur iOS. Il est supposé que vous avez déjà terminé :
Implémentation
Section titled “Implémentation”L’implémentation complète est disponible dans le fichier supabaseAuthUtils.ts de l’application exemple. Ce guide explique les concepts clés et comment l’utiliser.
Utilisation de l’assistant d’authentification
Section titled “Utilisation de l’assistant d’authentification”La fonction authenticateWithGoogleSupabase gère l’ensemble du flux d’authentification :
import { authenticateWithGoogleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithGoogleSupabase();if (result.success) { console.log('Connecté :', result.user); // Naviguez vers votre zone authentifiée} else { console.error('Erreur :', result.error);}Comment ça fonctionne
Section titled “Comment ça fonctionne”Pour une explication détaillée du fonctionnement du flux d’authentification, incluant la génération de nonce, la validation JWT et la connexion Supabase, consultez la section Comment ça fonctionne dans le guide de configuration générale.
Mises en garde importantes
Section titled “Mises en garde importantes”Problèmes de mise en cache de jetons iOS et de nonce
Section titled “Problèmes de mise en cache de jetons iOS et de nonce”Problème de mise en cache de nonce iOS
Sur iOS, Google Sign-In peut mettre en cache les jetons, ce qui peut entraîner l’échec de la validation du nonce. La fonction validateJWTToken détecte cela et le gère automatiquement :
- Détection automatique : La fonction vérifie si le nonce dans le jeton correspond au
nonceDigestattendu - Nouvelle tentative automatique : Si la validation échoue, elle se déconnecte automatiquement de Google et réessaie une fois
- Gestion des erreurs : Si la nouvelle tentative échoue également, une erreur est retournée
Pourquoi cela se produit : Le SDK Google Sign-In iOS met en cache les jetons pour des raisons de performance. Lorsqu’un jeton en cache est retourné, il peut avoir été généré avec un nonce différent (ou sans nonce), provoquant une inadéquation.
La solution : L’implémentation gère automatiquement cela en se déconnectant et en réessayant, ce qui force Google à générer un nouveau jeton avec le nonce correct.
Solution de contournement manuelle (si la nouvelle tentative automatique ne fonctionne pas) :
// Se déconnecter d'abord pour effacer les jetons en cacheawait SocialLogin.logout({ provider: 'google' });
// Puis s'authentifierconst result = await authenticateWithGoogleSupabase();Cela garantit qu’un nouveau jeton est obtenu avec le nonce correct.
Pour la référence complète du code, consultez la section Référence complète du code dans le guide de configuration générale.
Notes importantes
Section titled “Notes importantes”Gestion du nonce
Section titled “Gestion du nonce”L’implémentation du nonce suit le modèle de la documentation React Native Google Sign In :
rawNonceva àsignInWithIdToken()de Supabase- Supabase crée un hash de
rawNonceet le compare avec lenonceDigestqui est inclus dans le jeton ID de Google Sign-In nonceDigest(hash SHA-256, encodé en hexadécimal) va au paramètrenoncedans les API Google Sign-In
Mécanisme de nouvelle tentative automatique
Section titled “Mécanisme de nouvelle tentative automatique”La fonction authenticateWithGoogleSupabase inclut un paramètre retry :
- Premier appel (
retry=false) : Si la validation échoue, se déconnecte automatiquement et réessaie une fois - Appel de nouvelle tentative (
retry=true) : Si la validation échoue à nouveau, retourne immédiatement une erreur
Cela gère automatiquement le problème de mise en cache de jetons iOS.
Dépannage
Section titled “Dépannage”Si l’authentification échoue :
- Inadéquation de nonce : La fonction réessaie automatiquement - vérifiez les logs de la console pour plus de détails. Si cela persiste, déconnectez-vous manuellement d’abord
- Audience invalide : Vérifiez que vos ID client Google correspondent à la fois dans Google Cloud Console et Supabase (ID client iOS et Web)
- La validation du jeton échoue : Assurez-vous d’utiliser
mode: 'online'dans l’appel initialize pour obtenir un idToken - Configuration Info.plist : Assurez-vous que Info.plist a les schémas d’URL et GIDClientID corrects
- Consultez le code de l’application exemple pour référence