Passer au contenu

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é :

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

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.

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 :

  1. Détection automatique : la fonction vérifie si le nom occasionnel dans le jeton correspond au nonceDigest attendu
  2. Réessai automatique : si la validation échoue, il se déconnecte automatiquement de Google et réessaye une fois.
  3. 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 tokens
await SocialLogin.logout({ provider: 'google' });
// Then authenticate
const 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).

L’implémentation du nonce suit le modèle de la documentation de connexion React Native Google :

  • rawNonce va au signInWithIdToken() de Supabase
  • Supabase crée un hachage de rawNonce et le compare avec le nonceDigest qui est inclus dans le jeton d’identification de Google Connexion
  • nonceDigest (hachage SHA-256, encodé en hexadécimal) va au paramètre nonce dans 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.

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.