跳转到正文

iOS 上的 Supabase Google Login

GitHub

简介

简介

本指南将帮助你在 iOS 上将 Google Sign-In 与 Supabase Authentication 进行集成。前提是你已经完成了:

完整实现位于 示例应用的 supabaseAuthUtils.ts 文件。本指南将解释其核心概念及使用方法。

本指南中介绍的 authenticateWithGoogleSupabase 函数负责处理整个身份验证流程:

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

有关身份验证流程(包括 nonce 生成、JWT 验证和 Supabase 登录)的详细说明,请参阅 常规设置指南中的“工作原理”部分.

iOS Nonce 缓存问题

在 iOS 上,Google Sign-In 可能会缓存 token,这可能导致 nonce 验证失败。 validateJWTToken 该 function 会检测到此问题并自动处理:

  1. 自动检测:该 function 会检查 token 中的 nonce 是否与预期 nonceDigest
  2. 自动重试: 如果验证失败,系统会自动退出 Google 登录并重试一次
  3. 错误处理: 如果重试仍然失败,则返回错误

原因分析: iOS Google Sign-In SDK 为了性能会缓存 token。当返回缓存的 token 时,它可能使用了不同的 nonce(或没有 nonce),从而导致不匹配。

解决方案: 当前实现通过自动退出并重试来处理此问题,这会强制 Google 使用正确的 nonce 生成全新的 token。

手动规避方案 (如果自动重试无效):

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

这确保了获取到的 token 带有正确的 nonce。

如需查看完整的 code 参考文档,请参阅 常规设置指南中的完整 Code 参考部分.

Nonce 实现遵循以下模式: React Native Google Sign In 文档:

  • rawNonce 会发送到 Supabase 的 signInWithIdToken()
  • Supabase 会对以下内容进行哈希处理: rawNonce 并将其与以下内容进行比对: nonceDigest 该内容包含在 Google Sign-In 的 ID token 中
  • nonceDigest (SHA-256 哈希,十六进制编码) 会传给 nonce Google Sign-In API 中的参数

本指南中介绍的 authenticateWithGoogleSupabase 函数包含一个 retry 参数:

  • 首次调用 (retry=false): 如果验证失败,将自动登出并重试一次
  • 重试调用 (retry=true): 如果再次验证失败,则立即返回错误

这会自动处理 iOS 的 token 缓存问题。

如果身份验证失败:

  • Nonce 不匹配:函数会自动重试 - 请查看 console logs 获取详情。如果问题持续存在,请先手动退出登录
  • Audience 不匹配:请检查 Google Cloud Console 和 Supabase 中的 Google Client IDs 是否一致(包括 iOS 和 Web client IDs)
  • Token 验证失败:请确保在 mode: 'online' 的 initialize 调用中使用了该参数以获取 idToken
  • Info.plist 配置:请确保 Info.plist 已配置正确的 URL schemes 和 GIDClientID
  • 请查阅 code 示例应用 供参考

继续完成 iOS 端 Supabase Google Login 配置

标题为“继续完成 iOS 端 Supabase Google Login 配置”

如果你正在使用 iOS 上的 Supabase Google Login 用来规划身份验证和账户流程,并将它与 使用 @capgo/capacitor-social-login 关于使用 @capgo/capacitor-social-login 的原生能力, @capgo/capacitor-social-login 在 @capgo/capacitor-social-login 中查看实现细节, @capgo/capacitor-passkey 有关 @capgo/capacitor-passkey 的实现细节, @capgo/capacitor-native-biometric 以及 @capgo/capacitor-native-biometric 中的实现细节, 双因素认证 有关双重身份验证的实现细节。