web-dev-qa-db-fra.com

L'utilisateur n'a pas la permission d'accéder à cet objet. Android de stockage Firebase

Je suis nouveau au stockage de base de feu. Juste pour que je puisse l’apprendre, j’ai créé une application simple avec un bouton et une ImageView. Lorsque je clique sur le bouton, une image (from drawable) est affichée sur le ImageView. J'ai également écrit le code permettant de télécharger l'image sur Firebase, mais le message d'exception onAddFailureListener donne le message L'utilisateur n'est pas autorisé à accéder à cet objet. Que devrais-je faire ?

package com.example.asad.save_photo;

import Android.app.Activity;
import Android.graphics.Bitmap;
import Android.os.Bundle;
import Android.net.Uri;
import Android.os.Environment;
import Android.support.annotation.NonNull;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;
import Android.widget.ImageView;
import Android.widget.Toast;

import com.google.Android.gms.tasks.OnFailureListener;
import com.google.Android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageMetadata;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import Java.io.ByteArrayOutputStream;
import Java.io.File;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FirebaseStorage storage = FirebaseStorage.getInstance();

        StorageReference storageRef = storage.getReferenceFromUrl("gs://savephoto-a1cc3.appspot.com");

        final StorageReference mountainsRef = storageRef.child("asad");

        Button butt = (Button) findViewById(R.id.button);


        butt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ImageView imageView = (ImageView) findViewById(R.id.image);
                imageView.setImageResource(R.drawable.back2);
                //imageView.setImageResource(R.drawable.back2);

                imageView.setDrawingCacheEnabled(true);
                imageView.buildDrawingCache();
                Bitmap bitmap = imageView.getDrawingCache();


                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                final byte[] data = baos.toByteArray();

                UploadTask uploadTask = mountainsRef.putBytes(data);
                uploadTask.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle unsuccessful uploads
                        showToast(exception.getMessage());
                    }
                });
                        uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                        //Uri downloadUrl = taskSnapshot.getDownloadUrl();
                        showToast("success !!!!!");
                    }
                });


            }
        });

    }

    public void showToast(String s) {
        Toast.makeText(this,s,Toast.LENGTH_LONG).show();
    }
}

Voici mes règles de stockage firebase 

service firebase.storage {
  match /b/savephoto-a1cc3.appspot.com/o {
    allow read,write;
  }
}
12
ashay

Mettez à jour vos règles de sécurité avec match /{allPaths=**} pour indiquer que l'accès public en lecture et en écriture est autorisé sur tous les chemins:

service firebase.storage {
  match /b/savephoto-a1cc3.appspot.com/o {
    match /{allPaths=**} {
      // Allow access by all users
      allow read, write;
    }
  }
}

Diverses règles par défaut sont fournies dans les onglets de la section Exemples de règles de la documentation.

32
Bob Snyder

Modifier vos règles de stockage dans la console Firebase

 enter image description here

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
10
Ghanshyam Nayma

Il suffit d'aller à Stockage - Règles. Entrez la règle comme suit, en remplaçant le nom du compartiment par votre propre nom. Vous pouvez trouver le nom du compartiment en allant dans Stockage - Fichiers.

Cela devrait ressembler à quelque chose comme ceci: Myapplication-xxxx.appspot.com

C'est tout ce dont vous avez besoin. Vous n'avez pas besoin d'activer l'authentification, si vous le faites uniquement à des fins de test. Si vous avez besoin d'une authentification, vous pouvez l'ajouter ultérieurement. 

 enter image description here

3
live-love

Aller au stockage -> onglet Règles

ajoute ça 

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

 enter image description here

1
KishanSolanki124

Ces solutions n'ont vraiment pas résolu mon problème.

ce qui a résolu mon problème, ce sont ces lignes: 

module d'application 

implementation 'com.google.firebase:firebase-database:15.0.0'
implementation 'com.google.firebase:firebase-storage:15.0.0'
implementation 'com.google.firebase:firebase-auth:15.0.0'

et ce code pour télécharger et obtenir un lien de téléchargement 

private void uploadImageToFirebase(Bitmap bmp) {

    try {
        String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
                "/news";
        File dir = new File(file_path);
        if (!dir.exists())
            dir.mkdirs();
        File file = new File(dir, "sketchpad" + "_" + ".png");
        FileOutputStream fOut = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 100, fOut);
        fOut.flush();
        fOut.close();
        Log.i("SECONDACTIVITY", "ADDED SUCCESSFULLY");

        Uri file2 = Uri.fromFile(file);


        //Now Upload
        final StorageReference storageRef = FirebaseStorage.getInstance().getReference();
        StorageReference riversRef = storageRef.child(file.getName());
        UploadTask uploadTask;
        uploadTask = riversRef.putFile(file2);
        progressDialog.show();
        progressDialog.setCancelable(false);


        uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                progressDialog.incrementProgressBy((int) progress);
            }
        });
        uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                progressDialog.dismiss();
                Uri DownloadLink = taskSnapshot.getDownloadUrl();
                String imgUrl = DownloadLink.toString();
                FirebaseDatabase.getInstance().getReference().child("image_link").setValue(imgUrl);
            }
        });
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                progressDialog.dismiss();
            }
        });


    } catch (IOException e) {
        e.printStackTrace();
    }


}
0
Brigth Ligth