Com base nas respostas de prufrofro e Frank van Puffelen aqui , montei essa configuração que não impede a raspagem, mas pode tornar um pouco mais difícil o uso da chave da API.
Aviso: para obter seus dados, mesmo com esse método, é possível, por exemplo, simplesmente abrir o console JS no Chrome e digitar:
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
Somente as regras de segurança do banco de dados podem proteger seus dados.
No entanto, restrinjai o uso da chave da API de produção ao meu nome de domínio da seguinte maneira:
- https://console.developers.google.com/apis
- Selecione seu projeto Firebase
- Credenciais
- Em chaves da API, escolha sua chave do navegador. Deve ter a seguinte aparência: " Chave do navegador (criada automaticamente pelo Serviço Google) "
- Em " Aceitar solicitações dessas referências HTTP (web sites) ", adicionar o URL do seu aplicativo (exemple:
projectname.firebaseapp.com/*
)
Agora, o aplicativo funcionará apenas nesse nome de domínio específico. Então, criei outra chave de API que será privada para o desenvolvimento do host local.
- Clique em Criar credenciais> Chave da API
Por padrão, como mencionado por Emmanuel Campos, o Firebase apenas lista de permissões localhost
e o domínio de hospedagem do Firebase .
Para garantir que não publique a chave de API errada por engano, use um dos métodos a seguir para usar automaticamente a mais restrita na produção.
Configuração para Create-React-App
Em /env.development
:
REACT_APP_API_KEY=###dev-key###
Em /env.production
:
REACT_APP_API_KEY=###public-key###
No /src/index.js
const firebaseConfig = {
apiKey: process.env.REACT_APP_API_KEY,
// ...
};
Minha configuração anterior para o Webpack:
Eu uso o Webpack para criar meu aplicativo de produção e coloco minha chave de API de desenvolvimento dentro da minha, index.html
exatamente como você faria normalmente. Em seguida, dentro do meu webpack.production.config.js
arquivo, substituo a chave toda vez que index.html
é copiada para a compilação de produção:
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]