2017-09-28 2 views
0

Je travaille avec Cloud Function for Firebase. Lorsque j'utilise admin.database().ref, toutes les règles appliquées à la base de données ont été ignorées. Avec l'admin, je peux faire n'importe quoi. Pour être clair:Comment faire fonctionner la règle de base de données firebase avec admin.database(). Ref (fonction cloud)

J'ai une base de données en temps réel avec un ensemble de règles telles que; nom doit être chaîne et longueur> = 50, ...

Cela fonctionne lorsque vous utilisez le SDK, toutes les données non valides seront refusées. Mais quand je passe à utiliser la fonction cloud de Firebase (pour réduire le travail du côté client en fournissant un ensemble de points de terminaison https) cela ne fonctionnait plus. Donc, je me demande s'il y a un moyen de le faire fonctionner? Je pensais:

  1. trouver quelque chose remplacer pour admin.database() (a pris un coup d'oeil sur event.data.ref déjà, mais cela ne fonctionne pas dans mon cas - HTTP demande)
  2. vérifier les données en fonction des nuages ​​(pas bien)

Pourriez-vous me donner quelques indices/indices?

Répondre

1

Ceci est le comportement par défaut attendu des SDK Firebase Admin: le code accède à la base de données avec des privilèges administratifs.

Si vous voulez limiter ce que le code peut faire, vous pouvez l'initialiser pour qu'il s'exécute comme un UID spécifique. De la documentation sur Authenticate with limited privileges:

Pour obtenir un contrôle plus fin sur les ressources d'une instance d'application Firebase peut accéder, utiliser un identifiant unique dans vos règles de sécurité pour représenter votre service.

...

Ensuite, sur votre serveur, lors de l'initialisation de l'application Firebase, utilisez l'option databaseAuthVariableOverride pour remplacer l'objet auth utilisé par vos règles de base de données. Dans cet objet d'authentification personnalisé, définissez le champ uid sur l'identifiant que vous avez utilisé pour représenter votre service dans vos règles de sécurité.

// Initialize the app with a custom auth variable, limiting the server's access 
admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://databaseName.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: "my-service-worker" 
    } 
}); 

S'il vous plaît voir la documentation liée à l'exemple complet.