2017-06-18 1 views
0

Je suis nouveau dans le stockage Firebase. J'ai fait une application simple qui devrait télécharger un fichier de Firebase. Le téléchargement échoue à chaque fois avec l'erreur suivante:Stockage Firebase: l'utilisateur n'est pas autorisé à accéder à l'objet en dépit des règles publiques

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

Ce sont mes règles sur Firebase:

service firebase.storage { 
    match /b/***.appspot.com/o { 
    match /{allPaths=**} { 
     allow read, write: if true; 
    } 
    } 
} 

je l'ai déjà essayé aussi de permettre l'authentification anonyme, mais cela ne change rien malgré la La connexion est réussie.

EDIT: Ceci est mon code 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>() {...} 

Répondre

2

Mise à jour:

Le téléchargement de fichiers à partir de la racine de stockage est soit pas pris en charge ou ne sont pas couverts par la règle de sécurité par défaut. (Peut-être match /{allPaths=**} ne comprend pas la racine?) Déplacer le fichier vers un emplacement autre que la racine:

FirebaseStorage firebaseStorage = FirebaseStorage.getInstance(); 
storageRef = firebaseStorage.getReference("anyPath"); 

Si pour le test que vous souhaitez autoriser l'accès du public vous seau de stockage, utilisez ces règles, copiées du Storage Guide. La règle affichée par j_h_o_m_o est plus sûr, ce qui limite l'accès aux utilisateurs connectés à:

// 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; 
    } 
    } 
} 

Vérifiez aussi que votre nom de seau correspond à ce que vous voyez dans la console Firebase. Par exemple, si l'onglet Stockage des fichiers montre gs://project-12345.appspot.com, votre règle commencerait:

match /b/project-12345.appspot.com/o { 
+0

déjà essayé que ... n'a pas fonctionné pour moi –

+0

@FlorianBaader: Assurez-vous que le nom du compartiment est correct. Je reçois 'Code: -13021' quand le nom du compartiment est faux. –

+0

Merci pour votre aide! J'ai vérifié le nom du seau mais il n'y a pas d'erreur d'orthographe ... c'est vraiment frustrant (j'essaye de le faire fonctionner depuis 3 jours) –

0

REMARQUE: cela permettra quiconque d'accéder à votre stockage authentifié ou non essayez de modifier les règles de stockage à ce

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

cela vérifie si l'utilisateur est authentifié ou non, par défaut sur le stockage et l'authentification de la base de données est requise. Essayez de voir si vous pouvez accéder à votre base de données avec les règles suivantes sinon collez vos journaux d'erreurs –

+0

J'essaie juste de télécharger le fichier. Je voulais le sécuriser après. Mais de toute façon j'ai essayé votre solution et cela n'a pas fonctionné –