Burada prufrofro ve Frank van Puffelen'in cevaplarını temel alarak , kazıma işlemini engellemeyen, ancak API anahtarınızı kullanmayı biraz zorlaştıracak bu kurulumu bir araya getirdim.
Uyarı: Bu yöntemle bile verilerinizi almak için örneğin JS konsolunu Chrome'da açıp şunu yazabilirsiniz:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Yalnızca veritabanı güvenliği kuralları verilerinizi koruyabilir.
Bununla birlikte, üretim API'sı anahtar kullanımımı alan adımla şu şekilde kısıtladım:
- https://console.developers.google.com/apis
- Firebase projenizi seçin
- Kimlik bilgileri
- API anahtarları altında, Tarayıcı anahtarınızı seçin. Şöyle görünmelidir: " Tarayıcı anahtarı (Google Hizmeti tarafından otomatik olarak oluşturulur) "
- In " Bu HTTP yönlendirmeleri gelen istekleri (web sayfaları) Kabul uygulamanızın URL'sini ekleyin (EXEMPLE:"
projectname.firebaseapp.com/*
)
Şimdi uygulama yalnızca bu alan adı üzerinde çalışacaktır. Bu yüzden localhost geliştirmesi için özel olacak başka bir API Anahtarı oluşturdum.
- Kimlik bilgileri oluştur> API Anahtarı'nı tıklayın
Varsayılan olarak, Emmanuel Campos tarafından belirtildiği gibi, Firebase yalnızca beyaz listeleri localhost
ve Firebase barındırma alanınızı .
Yanlış API anahtarını yanlışlıkla yayınlamadığımdan emin olmak için, üretimde daha kısıtlı olanı otomatik olarak kullanmak için aşağıdaki yöntemlerden birini kullanıyorum.
Create-React-App Kurulumu
İçinde /env.development
:
REACT_APP_API_KEY=###dev-key###
İçinde /env.production
:
REACT_APP_API_KEY=###public-key###
İçinde /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Webpack için önceki kurulumum:
Webpack'i üretim uygulamamı oluşturmak için kullanıyorum ve dev API anahtarımı index.html
normalde yaptığım gibi içeri sokuyorum . Sonra, dosyamın içinde , üretim yapısına webpack.production.config.js
her index.html
kopyalandığında anahtarı değiştiriyorum :
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]