Спираючись на відповіді пруфрофро та Френка ван Пуффелена тут , я зібрав цю програму, яка не запобігає вискоблюванню, але може трохи ускладнити використання вашого ключа API.
Попередження. Щоб отримати ваші дані, навіть за допомогою цього методу, можна, наприклад, просто відкрити консоль JS в Chrome і ввести:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Лише правила безпеки бази даних можуть захищати ваші дані.
Тим не менш, я обмежив використання ключового API для мого доменного імені таким чином:
- https://console.developers.google.com/apis
- Виберіть проект Firebase
- Довірені дані
- Під клавішами API виберіть ключ браузера. Це має виглядати приблизно так: " Ключ браузера (автоматично створений службою Google) "
- У « Приймати запити від цього HTTP рекомендувачів (веб - сайти) », додайте URL вашого застосування (Exemple:
projectname.firebaseapp.com/*
)
Тепер додаток працюватиме лише на цьому конкретному доменному імені. Тому я створив ще один ключ API, який буде приватним для розробки localhost.
- Клацніть Створити облікові дані> Ключ API
За замовчуванням, як згадував Еммануель Кампос, Firebase лише білі списки localhost
та ваш хостинг-домен Firebase .
Щоб переконатися, що я не публікував помилковий ключ API помилково, я використовую один із наведених нижче способів автоматично використовувати більш обмежений у виробництві.
Налаштування для Create-React-App
В /env.development
:
REACT_APP_API_KEY=###dev-key###
В /env.production
:
REACT_APP_API_KEY=###public-key###
В /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Моя попередня настройка для Webpack:
Я використовую Webpack для створення свого виробничого додатка, і я кладу свій ключ розробки API всередину мого так index.html
само, як ви це робили зазвичай. Потім всередині мого webpack.production.config.js
файлу я замінюю ключ щоразу, коли index.html
копіюється у збірку виробництва:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]