Sur la base des réponses de prufrofro et Frank van Puffelen ici , j'ai mis en place cette configuration qui n'empêche pas le grattage, mais peut rendre légèrement plus difficile l'utilisation de votre clé API.
Attention: Pour obtenir vos données, même avec cette méthode, on peut par exemple simplement ouvrir la console JS dans Chrome et taper:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Seules les règles de sécurité de la base de données peuvent protéger vos données.
Néanmoins, j'ai limité l'utilisation de ma clé d'API de production à mon nom de domaine comme ceci:
- https://console.developers.google.com/apis
- Sélectionnez votre projet Firebase
- Identifiants
- Sous Clés API, choisissez votre clé de navigateur. Il devrait ressembler à ceci: " Clé de navigateur (créée automatiquement par le service Google) "
- Dans « Accepter les demandes de ces référants HTTP (sites web) », ajoutez l'URL de votre application (exemple:
projectname.firebaseapp.com/*
)
Maintenant, l'application ne fonctionnera que sur ce nom de domaine spécifique. J'ai donc créé une autre clé API qui sera privée pour le développement localhost.
- Cliquez sur Créer des informations d'identification> Clé API
Par défaut, comme mentionné par Emmanuel Campos, Firebase seulement whitelists localhost
et votre domaine d' hébergement Firebase .
Afin de ne pas publier par erreur la mauvaise clé API, j'utilise l'une des méthodes suivantes pour utiliser automatiquement la plus restreinte en production.
Configuration de Create-React-App
Dans /env.development
:
REACT_APP_API_KEY=###dev-key###
Dans /env.production
:
REACT_APP_API_KEY=###public-key###
Dans /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Ma configuration précédente pour Webpack:
J'utilise Webpack pour créer mon application de production et je mets ma clé API de développement dans mon index.html
comme vous le feriez normalement. Ensuite, à l'intérieur de mon webpack.production.config.js
fichier, je remplace la clé chaque fois qu'elle index.html
est copiée dans la build de production:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]