iOS 上的 Supabase Google Login
复制包含安装步骤和该插件完整 Markdown 指南的配置 prompt。
简介
简介本指南将帮助你在 iOS 上将 Google Sign-In 与 Supabase Authentication 进行集成。前提是你已经完成了:
实现
“实现”章节完整实现位于 示例应用的 supabaseAuthUtils.ts 文件。本指南将解释其核心概念及使用方法。
使用 Authentication Helper
章节标题为“使用 Authentication Helper”本指南中介绍的 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 Token 缓存与 Nonce 问题
标题为“iOS Token 缓存与 Nonce 问题”的部分iOS Nonce 缓存问题
在 iOS 上,Google Sign-In 可能会缓存 token,这可能导致 nonce 验证失败。 validateJWTToken 该 function 会检测到此问题并自动处理:
- 自动检测:该 function 会检查 token 中的 nonce 是否与预期
nonceDigest - 自动重试: 如果验证失败,系统会自动退出 Google 登录并重试一次
- 错误处理: 如果重试仍然失败,则返回错误
原因分析: iOS Google Sign-In SDK 为了性能会缓存 token。当返回缓存的 token 时,它可能使用了不同的 nonce(或没有 nonce),从而导致不匹配。
解决方案: 当前实现通过自动退出并重试来处理此问题,这会强制 Google 使用正确的 nonce 生成全新的 token。
手动规避方案 (如果自动重试无效):
// Logout first to clear cached tokensawait SocialLogin.logout({ provider: 'google' });
// Then authenticateconst result = await authenticateWithGoogleSupabase();这确保了获取到的 token 带有正确的 nonce。
如需查看完整的 code 参考文档,请参阅 常规设置指南中的完整 Code 参考部分.
重要注意事项
标题为“重要注意事项”的部分Nonce 处理
标题为“Nonce 处理”的部分Nonce 实现遵循以下模式: React Native Google Sign In 文档:
rawNonce会发送到 Supabase 的signInWithIdToken()- Supabase 会对以下内容进行哈希处理:
rawNonce并将其与以下内容进行比对:nonceDigest该内容包含在 Google Sign-In 的 ID token 中 nonceDigest(SHA-256 哈希,十六进制编码) 会传给nonceGoogle 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 中的实现细节, 双因素认证 有关双重身份验证的实现细节。