【发布时间】:2018-11-20 15:25:06
【问题描述】:
在我的 android 应用程序中,我使用 Firebase 存储来保存图像,我已将安全规则设置为 null,然后我也无法上传图像并出现错误。 以下是我的错误、安全规则和 android 代码。请让我知道我在代码中做错了什么。
Logcat 错误:发生 StorageException。 用户无权访问此对象。 代码:-13021 HttpResult:403
安全规则:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth == null;
}
}
}
Java 代码:
galleryFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(SetAvatar.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
else{
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i,GALLERY_INTENT);
}
}
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){
uri = data.getData();
cv.setImageURI(uri);
final StorageReference filepath = sRef.child("Profile
Images").child(uri.getLastPathSegment());
UploadTask uploadTask = filepath.putFile(uri);
uploadTask.addOnSuccessListener(new
OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(SetAvatar.this, "Upload
successful",Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SetAvatar.this, "Upload Failed -> " + e,
Toast.LENGTH_SHORT).show();
}
});
}
}
谢谢
【问题讨论】:
-
但我无法发布图片,请您解释一下。
-
先创建你的
request.auth == true,然后再试一次 -
我已将其更改为 true 但仍然出现错误。但我没有对用户进行身份验证。
-
您的安全规则要求对用户进行身份验证。由于您的代码没有显示您以任何方式对用户进行身份验证,因此错误消息似乎是正确的:不允许用户写入存储位置。
标签: android firebase firebase-storage