SwiftUI集成Supabase Storage:无法列出公开存储桶问题
解决Supabase Storage无法列出公开存储桶的问题
检查存储桶权限配置
公开存储桶默认仅允许读取对象,列出存储桶权限需单独开启。登录Supabase控制台进入Storage页面,逐个检查目标桶的设置,确认「允许列出存储桶」(List buckets)权限已启用。修正API密钥与存储URL
- 代码中
"apikey": "anon"需替换为项目实际的匿名公钥(在Supabase控制台→项目设置→API→anon publickey获取)。 SupabaseStorageClient的URL必须添加/storage/v1后缀,这是客户端调用存储API的标准路径。- 匿名访问时,
Authorization头应使用Bearer 匿名公钥,而非服务端专用的JWT Secret。
修正后的初始化代码:
let storage = SupabaseStorageClient(url: "https://xxx.supabase.co/storage/v1", headers: [ "apikey": "你的匿名公钥", "Authorization": "Bearer 你的匿名公钥" ]) let client = SupabaseClient(supabaseURL: URL(string: "https://xxx.supabase.co")!, supabaseKey: "你的匿名公钥")- 代码中
CURL测试命令修正
用CURL排查时,确保请求路径和头信息正确:curl "https://xxx.supabase.co/storage/v1/buckets" \ -H "apikey: 你的匿名公钥" \ -H "Authorization: Bearer 你的匿名公钥"根据返回的错误码定位问题:403代表权限未开启,404代表URL路径错误。
异步函数执行上下文验证
在SwiftUI中调用uploadProfilePhoto这类异步函数时,需确保在正确的异步上下文执行,比如使用.task修饰符:.task { if let user = currentUser, let photoData = photoData { do { try await uploadProfilePhoto(for: user, photoData: photoData) } catch { print(error.localizedDescription) } } }
内容的提问来源于stack exchange,提问作者JasonDevelops
相关产品推荐
相关产品推荐

