Docker自托管Supabase在React项目中API请求无密钥错误排查
解决自托管Supabase "No API key found in request" 错误
1. 确认端口映射与网络可达性
- 检查
docker-compose.yml中supabase-api服务的端口映射是否正确,确保外部8080端口映射到容器内的8000端口:ports: - "8080:8000" - 验证服务器防火墙/安全组已开放8080端口,同时测试本地能通过
http://anthonyx82.ddns.net:8080/rest/v1/访问到Supabase API的说明页面,确认网络可达。
2. 验证ANON_KEY的正确性与前端加载
- 确认Supabase
.env文件中的ANON_KEY、SECRET_KEY和JWT_SECRET完全匹配生成密钥时的参数,修改.env后必须重启Docker容器使配置生效:docker-compose down -v docker-compose up -d - 检查React项目的
.env.local是否放在项目根目录,变量名严格以REACT_APP_开头,且重启React开发服务使其生效。可在client.js中临时打印密钥确认加载情况:import { createClient } from '@supabase/supabase-js' const supabaseUrl = process.env.REACT_APP_SUPABASE_URL const supabaseAnonKey = process.env.REACT_APP_ANON_KEY console.log('Loaded Anon Key:', supabaseAnonKey) // 确认输出正确的密钥内容 export const supabase = createClient(supabaseUrl, supabaseAnonKey)
3. 服务端配置验证
- 进入Supabase API容器,检查环境变量是否正确加载:
确保输出的密钥与你设置的一致。docker exec -it supabase-api env | grep ANON_KEY - 用curl直接调用API端点,排除前端代码问题:
如果仍返回"No API key found in request",说明问题出在Supabase服务端,可尝试重新生成密钥并替换.env文件后再次重启容器。curl -X POST http://anthonyx82.ddns.net:8080/auth/v1/signin/otp \ -H "apikey: YOUR_ANON_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"your-test-email@example.com"}'
4. 检查CORS配置
- 确认Supabase
.env中的CORS_ALLOWED_ORIGINS包含你的React应用地址(比如http://localhost:3000或线上域名),格式为逗号分隔的列表:
修改后重启Docker容器。CORS_ALLOWED_ORIGINS=http://localhost:3000,https://your-app-domain.com
内容的提问来源于stack exchange,提问作者Anthonyx82
相关产品推荐
相关产品推荐

