我是Firebase存储新手。我制作了一个应该从Firebase下载文件的简单应用程序。 每次下载失败,并出现以下错误:
StorageException: StorageException has occurred.
User does not have permission to access this object.
Code: -13021 HttpResult: 403
这些是我对Firebase的规定:
service firebase.storage {
match /b/***.appspot.com/o {
match /{allPaths=**} {
allow read, write: if true;
}
}
}
我已经尝试启用匿名身份验证,但即使登录成功,这也不会改变任何内容。
编辑:这是我的java代码:
FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance();
mAuth.signInAnonymously().addOnCompleteListener((Activity) context, new OnCompleteListener<AuthResult>() {...}
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
//Create a storage reference from our app
storageRef = firebaseStorage.getReference();
contentDir = new File(context.getFilesDir().getAbsolutePath() + "\\content\\testfile.txt");
storageRef.getFile(contentDir).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {...}
答案 0 :(得分:2)
<强>更新强>
不支持从存储根目录下载文件,或者默认安全规则不涵盖这些文件。 (也许match /{allPaths=**}
不包含root?)将文件移动到root以外的某个位置:
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
storageRef = firebaseStorage.getReference("anyPath");
如果要进行测试,您希望允许公共访问存储桶,请使用从Storage Guide复制的这些规则。 j_h_o_m_o发布的规则更安全,限制了对已登录用户的访问:
// Anyone can read or write to the bucket, even non-users of your app.
service firebase.storage {
match /b/***.appspot.com/o {
match /{allPaths=**} {
allow read, write;
}
}
}
同时检查您的存储桶名称是否与您在Firebase控制台中看到的名称相匹配。例如,如果“存储文件”选项卡显示gs://project-12345.appspot.com
,则您的规则将启动:
match /b/project-12345.appspot.com/o {
答案 1 :(得分:0)
注意:这将允许任何人访问您的存储是否经过身份验证 尝试将规则更改为存储到此
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth == null;
}
}
}