Aufbauend auf den Antworten von Prufrofro und Frank van Puffelen habe ich dieses Setup zusammengestellt, das das Scraping nicht verhindert, aber die Verwendung Ihres API-Schlüssels etwas erschweren kann.
Warnung: Um Ihre Daten auch mit dieser Methode abzurufen, können Sie beispielsweise einfach die JS-Konsole in Chrome öffnen und Folgendes eingeben:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Nur die Datenbanksicherheitsregeln können Ihre Daten schützen.
Trotzdem habe ich die Verwendung meines Produktions-API-Schlüssels wie folgt auf meinen Domain-Namen beschränkt:
- https://console.developers.google.com/apis
- Wählen Sie Ihr Firebase-Projekt aus
- Referenzen
- Wählen Sie unter API-Schlüssel Ihren Browser-Schlüssel aus. Es sollte folgendermaßen aussehen: " Browser-Schlüssel (automatisch von Google Service erstellt) "
- In " Accept - Anfragen von diesen HTTP - Referrer (Websites) ", fügen Sie die URL Ihrer App (exemple:
projectname.firebaseapp.com/*
)
Jetzt funktioniert die App nur noch mit diesem bestimmten Domainnamen. Also habe ich einen weiteren API-Schlüssel erstellt, der für die Entwicklung von localhost privat ist.
- Klicken Sie auf Anmeldeinformationen erstellen> API-Schlüssel
Wie von Emmanuel Campos erwähnt, sind Firebaselocalhost
standardmäßig nur Whitelists und Ihre Firebase-Hosting-Domain .
Um sicherzustellen, dass ich nicht versehentlich den falschen API-Schlüssel veröffentliche, verwende ich eine der folgenden Methoden, um automatisch den eingeschränkteren in der Produktion zu verwenden.
Setup für Create-React-App
In /env.development
:
REACT_APP_API_KEY=###dev-key###
In /env.production
:
REACT_APP_API_KEY=###public-key###
Im /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Mein vorheriges Setup für Webpack:
Ich verwende Webpack, um meine Produktions-App zu erstellen, und stecke meinen Dev-API-Schlüssel index.html
wie gewohnt in meinen . Dann webpack.production.config.js
ersetze ich in meiner Datei den Schlüssel jedes Mal, wenn er index.html
in den Produktionsbuild kopiert wird:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]