Flutter Supabase谷歌授权非本地环境异常排查求助
解决Supabase谷歌授权在Firebase Hosting环境卡住的问题
以下是针对该问题的排查与解决步骤:
1. 调整Firebase Hosting重写与缓存规则
Firebase Hosting的SPA重写规则可能拦截Supabase的Auth回调请求,导致流程中断。检查并修改firebase.json:
{ "hosting": { "public": "dist", "rewrites": [ { "source": "**", "destination": "/index.html" } ], "headers": [ { "source": "/auth/**", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" } ] } ] } }
确保你配置的重定向URL(如https://your-domain.web.app/auth/callback)能正常加载,不会被缓存或错误重定向。
2. 修复PKCE流程的Cookie配置
线上浏览器可能限制第三方Cookie,导致Supabase无法存储授权状态。初始化Supabase客户端时显式配置Cookie选项:
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { auth: { redirectTo: window.location.origin + '/auth/callback', cookieOptions: { secure: true, // HTTPS环境必须开启 sameSite: 'none', // 允许跨域Cookie传递 maxAge: 3600 } } })
同时在Supabase控制台Authentication > Settings > Cookie Settings中,将SameSite设为None并开启Secure选项。
3. 确认HTTPS环境与混合内容
确保Firebase Hosting域名的SSL证书配置正常,页面无HTTP资源加载(混合内容)。谷歌授权流程强制要求HTTPS环境,混合内容会导致请求被浏览器拦截。
4. 清除浏览器缓存与Cookie
线上环境的旧缓存或残留Cookie可能干扰授权状态。打开浏览器开发者工具,清除对应域名的所有Cookie和缓存后重试。
5. 校验客户端初始化细节
- 确认线上使用的Supabase URL、Anon Key与控制台完全一致,避免误用到本地测试配置。
- 确保
redirectTo参数与Supabase控制台的重定向URL完全匹配,包括域名前缀(如www/非www)、末尾斜杠等细节。
6. 排查浏览器控制台错误
打开浏览器开发者工具的Console和Network标签:
- 查看是否有CORS错误、Cookie被阻止的警告信息。
- 检查
/auth/v1/authorize请求的响应状态,以及后续是否触发了/auth/v1/token请求(用于交换授权码获取Token),若未触发则说明前端未正确处理回调逻辑。
内容的提问来源于stack exchange,提问作者Denis Maliush
相关产品推荐
相关产品推荐

