Aller directement au contenu

Connexion Supabase Google sur iOS

Ce guide vous aidera à intégrer Google Sign-In avec Supabase Authentication sur iOS. Il est supposé que vous avez déjà terminé :

La mise en œuvre complète est disponible dans le dossier de l'application d'exemple. Ce guide explique les principaux concepts et comment l'utiliser. supabaseAuthUtils.ts En utilisant l'assistant d'authentification

Section intitulée « En utilisant l'assistant d'authentification »

La

fichier gère l'ensemble du flux d'authentification : authenticateWithGoogleSupabase Copier dans le presse-papier

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 dans le guide de configuration générale Pour une explication détaillée de la façon dont le flux d'authentification fonctionne, y compris la génération de nonce, la validation de JWT et l'inscription Supabase, voir la section « Comment ça marche » dans le guide de configuration générale..

Problème de Caching de Nonces iOS

Sur iOS, Google Sign-In peut stocker des jetons, ce qui peut entraîner une échec de la validation de la nonce. Le validateJWTToken détecte cela et gère automatiquement :

  1. Détection Automatique : La fonction vérifie si la nonce du jeton correspond à la nonce attendue nonceDigest
  2. Réessayage Automatique : Si la validation échoue, il se déconnecte automatiquement de Google et réessaye une fois
  3. Gestion des Erreurs: Si la réessayer échoue également, une erreur est renvoyée

Pourquoi cela se produit: L'SDK iOS Google Sign-In cache les jetons pour des raisons de performance. Lorsqu'un jeton stocké est renvoyé, il peut avoir été généré avec un nonce différent (ou aucun nonce), ce qui entraîne un désaccord.

La solution: La mise en œuvre gère automatiquement cela en se déconnectant et en réessayant, ce qui oblige Google à générer un jeton frais avec le nonce correct.

Solution de contournement manuelle (si la réessayer automatique ne fonctionne pas):

// Logout first to clear cached tokens
await SocialLogin.logout({ provider: 'google' });
// Then authenticate
const result = await authenticateWithGoogleSupabase();

Cela garantit que le jeton frais est obtenu avec le nonce correct.

Pour la référence complète de l'code , voir la section Référence complète de l'Code dans le guide de configuration générale.

La mise en œuvre de Nonce suit le modèle de la documentation de React Native Google Sign In va à Supabase’s:

  • rawNonce Supabase fait une hache de signInWithIdToken()
  • et la compare avec le rawNonce qui est inclus dans le jeton ID de Google Sign-In nonceDigest (hachage SHA-256, encodé en hexadécimal) va à la
  • nonceDigest paramètre dans les API de Google Sign-In nonce Mécanisme de réessai automatique

Mécanisme de réessai automatique

Mécanisme de réessai automatique

Le authenticateWithGoogleSupabase Cette fonction comprend un retry paramètre :

  • Première appel (retry=false): Si la validation échoue, se déconnecte automatiquement et réessaye une fois
  • Appel de réessai (retry=true): Si la validation échoue à nouveau, renvoie immédiatement une erreur

Cela résout automatiquement le problème de cache de jeton iOS.

Si l'authentification échoue :

  • Mauvaise valeur de nonce: La fonction se réessaye automatiquement - consultez les journaux de console pour plus de détails. Si cela persiste, déconnectez-vous manuellement en premier
  • Audience non valide: Vérifiez que vos identifiants Client Google correspondent dans la console Google Cloud et Supabase (tous les identifiants client iOS et Web)
  • Échec de la validation du jeton: Assurez-vous d'utiliser mode: 'online' le __CAPGO_KEEP_0__
  • dans l'appel d'initialisation pour obtenir un idTokenConfiguration de Info.plist
  • : Assurez-vous que Info.plist a les schémas URL corrects et GIDClientID example app code application d'exemple __CAPGO_KEEP_0__