0

目的:認証されたユーザーがプロフィール写真をアップロードして、そのユーザーに関連付けることを許可します。注Firebase(ストレージ例外) - ユーザーに許可がありません。

は、私は、ユーザーのドキュメントに従っ:https://firebase.google.com/docs/storage/security/user-security

問題:

StorageException: StorageException has occurred. 
     User does not have permission to access this object. 
     Code: -13021 HttpResult: 403 

StorageException: The server has terminated the upload session 
      java.io.IOException: The server has terminated the upload session 

テストが行​​わ:私はエラーを取得しています 私が最初のように私のルールを持っていました次のようになりました。は、認証されたユーザーに写真をアップロードすることを許可しましたユーザーは): Associate Image to UserID

service firebase.storage { 
match /b/{bucket}/o { 
    match /{allPaths=**} { 
    allow read: if request.auth != null; 
    } 
    match /images { 
    // Only an individual user can write to "their" images 
    match /{userId}/{imageId} { 
     allow write: if request.auth.uid == userId; 
    } 
    } 

    } 
} 

新しいルールを持つユーザーIDに関連付けられた写真になっていた:Authenticated Users

は、私はユーザーIDで、画像を関連付けるために、以下に私のルールを変更しました私は、アクセス許可を持っていないというStorage Exceptionエラーを受け取ります。

それが重要ならばこれは私のストレージの参照です:

storage = FirebaseStorage.getInstance(); 
    storageReference = storage.getReferenceFromUrl("gs://app-name.appspot.com").child("20170702_174811.jpeg"); //was PNG 

そして:

public void handleChooseImage(View v) { 
     Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i, SELECTED_PICTURE); //then goes to onActivityResult 
    } 

を文書化することに加えて、私が被写体にできるだけ多くのYouTubeの動画を見てみましたが、ように見えてきました何かが欠けている。誰かが親切に私を正しい方向に向けることができますか?

答えて

0

ここでは2つ(多分3)の問題があります。

  1. 次の2つの重複するルールを持っている
  2. あなたの参照が正しい場所あなたがしている場合、それは私にははっきりしていない
  3. を指していません実際Firebase Auth

1を使用して:第二、より具体的な1が必要としているときには、認証のみを必要とするすべてのファイル({allPaths=**})上のルールを持っていますユーザーごとの認証。それはあなたが唯一の希望することを可能性があります:

service firebase.storage { 
    match /b/{bucket}/o { 
    match /images/{userId}/{imageId} { 
     allow write: if request.auth.uid == userId; 
    } 
    } 
} 

2:あなたはむしろ/images/{userId}/{imageId}パスよりも、単一のファイル名を指しています。代わりに、次のようにしてください:

String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
String imageId = "myFile.png" // or whatever you want to call it 
FirebaseStorage storage = FirebaseStorage.getInstance(); 
StorageReference ref = storage.getReference() 
         .child("images") 
         .child(userId) 
         .child(imageId); 

3:まだ使用していない場合は、Firebase Authを使用してプロバイダでサインインしてください。

関連する問題