Opierając się na odpowiedziach prufrofro i Franka van Puffelena tutaj , stworzyłem tę konfigurację, która nie zapobiega skrobaniu, ale może nieco utrudnić korzystanie z klucza API.
Ostrzeżenie: aby uzyskać dane, nawet przy użyciu tej metody, można na przykład po prostu otworzyć konsolę JS w Chrome i wpisać:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Tylko reguły bezpieczeństwa bazy danych mogą chronić twoje dane.
Niemniej jednak ograniczyłem użycie mojego produkcyjnego klucza API do mojej nazwy domeny w następujący sposób:
- https://console.developers.google.com/apis
- Wybierz swój projekt Firebase
- Kwalifikacje
- W obszarze Klucze API wybierz klucz przeglądarki. Powinno to wyglądać tak: „ Klucz przeglądarki (automatycznie utworzony przez usługę Google) ”
- W „ Akceptuj żądania od tych kierujących HTTP (strony internetowej) ” dodaj adres URL aplikacji (exemple:
projectname.firebaseapp.com/*
)
Teraz aplikacja będzie działać tylko z tą konkretną nazwą domeny. Stworzyłem więc kolejny klucz API, który będzie prywatny dla rozwoju hosta lokalnego.
- Kliknij Utwórz poświadczenia> Klucz API
Domyślnie, jak wspomniał Emmanuel Campos, Firebase tylko białe listy localhost
i twoja domena hostingowa Firebase .
Aby upewnić się, że nie opublikuję przez pomyłkę niewłaściwego klucza API, używam jednej z następujących metod, aby automatycznie użyć bardziej ograniczonego w produkcji.
Konfiguracja aplikacji Create-React
W /env.development
:
REACT_APP_API_KEY=###dev-key###
W /env.production
:
REACT_APP_API_KEY=###public-key###
W /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Moja poprzednia konfiguracja dla pakietu Webpack:
Używam Webpacka do budowania mojej aplikacji produkcyjnej i wkładam mój klucz API dewelopera do mojego, index.html
tak jak zwykle. Następnie w moim webpack.production.config.js
pliku zastępuję klucz za każdym razem, gdy index.html
kopiowany jest do wersji produkcyjnej:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]