11 votes

Dans l'application react native (via Expo) en utilisant les autorisations firestore, request.auth est toujours nul.

Voici mon code :

firebase.auth().onAuthStateChanged((user) => {
    if (user) {
        console.log("Nous sommes authentifiés maintenant !");
        firebase.firestore().collection("users")
            .doc(firebase.auth().currentUser.uid).set({ name: "nouveau nom" });
    } else {
        loginWithFacebook();
    }
});

Et voici mes règles de permission :

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null;
    }
  }
}

Il semble que peu importe quoi, request.auth est toujours null. L'erreur que je reçois :

Firestore (4.8.0) 2017-12-20T04:18:27.321Z [Connections] : WebChannel avez une erreur : {"code":403,"message":"Permissions manquantes ou insuffisantes.","status":"PERMISSION_DENIED"}

4voto

Igor Points 41

J'ai rétrogradé vers Firebase SDK 4.6.2 lorsque j'ai eu ce problème avec le dernier SDK JS Firebase sur Expo.

De plus, vous devez faire ceci pour que tout fonctionne :

Copiez https://gist.githubusercontent.com/mikelehen/444950a35019208f3aaf18d37ab4937c/raw/85ac4cb3108d92163cb8f04fbdddcc88d4081aab/index.js

sur votre node_modules/@firebase/webchannel-wrapper/dist/index.js

Sans cela, vous n'obtiendrez rien de vos collections.

J'espère que cela vous aidera.

3voto

Jade Koskela Points 31

J'ai différencié les requêtes provenant du même code s'exécutant dans le navigateur par rapport à expo. Une différence que j'ai remarquée était l'absence de l'en-tête Origin. J'ai patché le xhr et cela fonctionne pour mes besoins. Je ne suis pas sûr si c'est un bug ou un comportement attendu. J'ai demandé sur slack/firestore et discord/react-native mais je n'ai pas obtenu beaucoup d'informations.

const xhrInterceptor = require('react-native/Libraries/Network/XHRInterceptor')
xhrInterceptor.setSendCallback((data, xhr) => {
  if (xhr._method === 'POST') {
    // WHATWG spécifie l'origine opaque comme tout autre chose qu'un tuple d'uri. Il se sérialise en la chaîne 'null'.
    // https://html.spec.whatwg.org/multipage/origin.html
    xhr.setRequestHeader('Origin', 'null')
  }
})
xhrInterceptor.enableInterception()

1voto

Ronen Rabinovici Points 413

Il semble y avoir un bug - d'autres utilisateurs de haute réputation l'ont également expérimenté. Je mettrai à jour plus d'informations lorsque nous trouverons un correctif. Si quelqu'un a réussi à le faire fonctionner (sur react-native à travers expo), veuillez partager.

0voto

Désolé d'arriver en retard à la fête, mais je viens de tomber là-dessus et j'ai pensé que je partagerais mon expérience. J'ai eu exactement le même problème, et après des mois de recherche et de débogage, il s'est résolu quand j'ai mis à jour vers firebase v 5. Voici un lien vers mon post et ma solution SO. J'espère que ça aide : https://stackoverflow.com/a/51115385/6158840

0voto

carlosndiaye Points 1

J'ai résolu ce problème en rétrogradant la version de Firebase en version 5.0.0 (j'utilisais la version 6.4). J'espère que cela pourra aider d'autres personnes.

  1. Dans votre package.json

    dependencies: { "firebase": "^5.0.0" }

  2. Mettre à jour les dépendances

    npm install

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X