Sobre la base de las respuestas de prufrofro y Frank van Puffelen aquí , armé esta configuración que no evita el raspado, pero puede hacer que sea un poco más difícil usar su clave API.
Advertencia: para obtener sus datos, incluso con este método, uno puede, por ejemplo, simplemente abrir la consola JS en Chrome y escribir:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Solo las reglas de seguridad de la base de datos pueden proteger sus datos.
Sin embargo, restringí el uso de mi clave de API de producción a mi nombre de dominio de esta manera:
- https://console.developers.google.com/apis
- Selecciona tu proyecto de Firebase
- Cartas credenciales
- En Claves de API, elija la clave de su navegador. Debería verse así: " Clave del navegador (creada automáticamente por el Servicio de Google) "
- En " Aceptar las peticiones de estos referentes HTTP (sitios web) ", añadir la URL de su aplicación (Ejemplo:
projectname.firebaseapp.com/*
)
Ahora la aplicación solo funcionará en este nombre de dominio específico. Así que creé otra clave API que será privada para el desarrollo localhost.
- Haga clic en Crear credenciales> Clave API
Por defecto, como lo menciona Emmanuel Campos, Firebase solo incluye las listas blancas localhost
y su dominio de alojamiento de Firebase .
Para asegurarme de que no publico la clave API incorrecta por error, utilizo uno de los siguientes métodos para utilizar automáticamente la clave más restringida en producción.
Configuración para crear-reaccionar-aplicación
En /env.development
:
REACT_APP_API_KEY=###dev-key###
En /env.production
:
REACT_APP_API_KEY=###public-key###
En /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Mi configuración anterior para Webpack:
Utilizo Webpack para construir mi aplicación de producción y pongo mi clave de API de desarrollo dentro de mi index.html
tal como lo haría normalmente. Luego, dentro de mi webpack.production.config.js
archivo, reemplazo la clave cada vez que index.html
se copia en la compilación de producción:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]