Passer à la navigation

Supabase Google Login sur iOS

GitHub

Cette guide vous aidera à intégrer Google Sign-In avec l'authentification Supabase sur iOS. Il est supposé que vous avez déjà complété :

La mise en œuvre complète est disponible dans le fichier de l'application d'exemple. supabaseAuthUtils.ts Ce guide explique les concepts clés et comment l'utiliser.

Le authenticateWithGoogleSupabase Cette fonction gère l'ensemble 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 de la manière dont le flux d'authentification fonctionne, y compris la génération de nonce, la validation de JWT et l'inscription Supabase, consultez la section Comment ça marche du guide de configuration générale.

Problème de mise en cache de nonce iOS

Sur iOS, Google Sign-In peut mettre en cache des jetons, ce qui peut entraîner une échec de la validation de la nonce. Le validateJWTToken fonction 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éessai automatique: Si la validation échoue, elle se déconnecte automatiquement de Google et réessaye une fois
  3. Gestion des erreurs: Si le réessai échoue également, une erreur est renvoyée

Pourquoi cela se produit: Google Sign-In iOS SDK met en cache des jetons pour des raisons de performance. Lorsqu'un jeton mis en cache est retourné, il peut avoir été généré avec une nonce différente (ou sans nonce), entraînant 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 bon nonce.

Manuel de contournement (si la réessai automatique ne fonctionne pas):

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

Cela garantit que l'on obtient un jeton frais avec le bon nonce.

Pour la référence complète code, voir la section Référence complète Code de la section Paramètres généraux.

La mise en œuvre du nonce suit le modèle de la Documentation de connexion Google pour React Native:

  • rawNonce se rend à Supabase’s signInWithIdToken()
  • Supabase fait une hachage de rawNonce et le compare avec le nonceDigest qui est inclus dans le jeton ID de la connexion Google Sign-In
  • nonceDigest (hachage SHA-256, encodé en hexadécimal) se rend à la nonce paramètre dans les API de connexion Google Sign-In

Le authenticateWithGoogleSupabase fonction inclut un retry paramètre :

  • 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, retourne immédiatement une erreur

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

Si l'authentification échoue :

  • Mauvais nonce: La fonction 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 de client iOS et Web)
  • La validation du jeton échoue: Assurez-vous d'utiliser mode: 'online' dans l'appel d'initialisation pour obtenir un idToken
  • Configuration de Info.plist: Assurez-vous que Info.plist contient les schémas URL et GIDClientID corrects
  • Examinez l'exemple d'application __CAPGO_KEEP_0__ example app code Continuez de Supabase Google Login sur iOS

Section intitulée “Continuez de Supabase Google Login sur iOS”

Si vous utilisez

Supabase Google Login sur iOS Supabase Google Login sur iOS pour planifier l'authentification et les flux de compte, connectez-le avec Utilisation de @capgo/capacitor-login-social pour la capacité native dans Utilisation de @capgo/capacitor-login-social, @capgo/capacitor-login-social pour le détail d'implémentation dans @capgo/capacitor-login-social, @capgo/capacitor-passkey pour le détail d'implémentation dans @capgo/capacitor-passkey, @capgo/capacitor-biométrique-native pour le détail d'implémentation dans @capgo/capacitor-biométrique-native, et L'authentification à deux facteurs pour le détail d'implémentation dans L'authentification à deux facteurs.