Supabase Google Connectez-vous sur iOS
##Présentation
Ce guide vous aidera à intégrer la connexion Google avec l’authentification Supabase sur iOS. On suppose que vous avez déjà complété :
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’intégralité du flux d’authentification :
import { authenticateWithGoogleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithGoogleSupabase();if (result.success) { console.log('Signed in:', result.user); // Navigate to your authenticated area} else { console.error('Error:', result.error);}Comment ça marche
Section titled “Comment ça marche”Pour une explication détaillée du fonctionnement du flux d’authentification, y compris la génération de noms occasionnels, la validation JWT et la connexion Supabase, consultez la section Comment ça marche dans le guide de configuration générale.
Mises en garde importantes
Section titled “Mises en garde importantes”iOS Problèmes de mise en cache des jetons et de cas occasionnels
Section titled “iOS Problèmes de mise en cache des jetons et de cas occasionnels”iOS Problème de mise en cache occasionnel
Sur iOS, Google Sign-In peut mettre en cache les jetons, ce qui peut entraîner l’échec de la validation occasionnelle. La fonction validateJWTToken détecte cela et le gère automatiquement :
- Détection automatique : la fonction vérifie si le nom occasionnel dans le jeton correspond au
nonceDigestattendu - Réessai automatique : si la validation échoue, il se déconnecte automatiquement de Google et réessaye une fois.
- Gestion des erreurs : si la nouvelle tentative échoue également, une erreur est renvoyée
Pourquoi cela se produit : iOS Google Connexion SDK met en cache les jetons pour des raisons de performances. Lorsqu’un jeton mis en cache est renvoyé, il peut avoir été généré avec un nom occasionnel différent (ou aucun nom occasionnel), provoquant une incompatibilité.
La solution : l’implémentation gère automatiquement cela en se déconnectant et en réessayant, ce qui oblige Google à générer un nouveau jeton avec le nom occasionnel correct.
Solution manuelle (si la nouvelle tentative automatique ne fonctionne pas) :
// Logout first to clear cached tokensawait SocialLogin.logout({ provider: 'google' });
// Then authenticateconst result = await authenticateWithGoogleSupabase();Cela garantit qu’un nouveau jeton est obtenu avec le bon occasionnel.
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] (/docs/plugins/social-login/supabase/google/general/#complete-code-reference).
Remarques importantes
Section titled “Remarques importantes”Gestion des cas occasionnels
Section titled “Gestion des cas occasionnels”L’implémentation du nonce suit le modèle de la documentation de connexion React Native Google :
rawNonceva ausignInWithIdToken()de Supabase- Supabase crée un hachage de
rawNonceet le compare avec lenonceDigestqui est inclus dans le jeton d’identification de Google Connexion nonceDigest(hachage SHA-256, encodé en hexadécimal) va au paramètrenoncedans les API de connexion Google
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éessaye une fois - Réessayer l’appel (
retry=true) : si la validation échoue à nouveau, renvoie immédiatement une erreur
Cela gère automatiquement le problème de mise en cache du jeton iOS.
Dépannage
Section titled “Dépannage”Si l’authentification échoue :- Incompatibilité occasionnelle : la fonction réessaye automatiquement - consultez les journaux de la console pour plus de détails. Si le problème persiste, déconnectez-vous d’abord manuellement.
- Audience non valide : vérifiez que vos ID client Google correspondent à la fois dans Google Cloud Console et dans Supabase (à la fois dans iOS et dans les ID client Web).
- La validation du jeton échoue : assurez-vous d’utiliser
mode: 'online'dans l’appel d’initialisation pour obtenir un idToken - Configuration Info.plist : assurez-vous qu’Info.plist dispose des schémas d’URL et du GIDClientID corrects.
- Consultez l’exemple de code d’application pour référence.