Estou tentando baixar arquivos do Firebase Storage por meio de um XMLHttpRequest, mas Access-Control-Allow-Origin não está definido no recurso, portanto, não é possível. Existe alguma maneira de definir este cabeçalho no servidor de armazenamento?
Mensagem de erro do Chrome:
XMLHttpRequest não pode carregar https://firebasestorage.googleapis.com/[EDITED] Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado. Portanto, o acesso de origem ' http: // localhost: 3449 ' não é permitido.
— Blacksad
Não há representação suficiente para um comentário, mas o método acima ainda é o correto. Só queria compartilhar os documentos oficiais do firebase sobre este: firebase.google.com/docs/storage/web/…
— Andrew McOlash
Desta postagem no firebase-talk group / list :
A maneira mais fácil de configurar seus dados para CORS é com a gsutilferramenta de linha de comando. As instruções de instalação do gsutilestão disponíveis em https://cloud.google.com/storage/docs/gsutil_install . Depois de instalargsutil e autenticar com ele, você pode usá-lo para configurar o CORS.
Por exemplo, se você deseja apenas permitir downloads de objetos de seu domínio personalizado, coloque esses dados em um arquivo denominado cors.json (substituindo "https://example.com"por seu domínio):
Em seguida, execute este comando (substituindo "exampleproject.appspot.com"pelo nome do seu intervalo):
e você deve ser definido.
Se você precisar de uma configuração CORS mais complicada, verifique os documentos em https://cloud.google.com/storage/docs/cross-origin#Configuring-CORS-on-a-Bucket .
Existe uma maneira de permitir todas as origens semelhantes a Access-Control-Allow-Origin: *?
— dooderson
Como posso encontrar o nome exato do meu intervalo do Firebase?
@ user1311069 apenas use em "origin": ["*"],vez de"origin": ["https://example.com"],
— rigdonmr
O Firebase realmente precisa descobrir uma maneira amigável de fazer isso. Definir permissões em um banco de dados Firebase real não é tão frustrante, nem definir permissões de bucket do S3. Forte preferência por S3 neste momento.
— Matt Jensen
Se você não quiser instalar o utilitário, uma maneira prática é acessar console.cloud.google.com/home e clicar em "Ativar Google Cloud Shell" no canto superior direito. Isso abrirá um shell com o gsutil já instalado e com acesso aos seus projetos de armazenamento do Firebase. (no shell eu usei o pico para criar um json, então fiz gsutil cors set myjson.json gs://projectname.appspot.comcomo mencionado acima)
— Eindbaas
O Google Cloud agora tem um editor embutido para tornar esse processo ainda mais fácil. Não há necessidade de instalar nada em seu sistema local.
Abra o console do GCP e inicie uma sessão de terminal em nuvem clicando no botão do >_ícone na barra de navegação superior.
Clique no ícone de lápis para abrir o editor e, em seguida, crie o cors.jsonarquivo.
Corre gsutil cors set cors.json gs://your-bucket
— JeffD23
Preso na etapa 1. Explique "e inicie uma sessão de terminal em nuvem" Eu abro o console e não vejo nenhum botão ou link para "iniciar uma sessão de terminal em nuvem"
— fortesl
É o ícone no >_
— painel de
Existe uma maneira direta de puxar a configuração do cors existente primeiro para reversão, se necessário?
Fez o truque! obrigado. Devo dizer que isso poderia ser muito mais simples se fosse controlado a partir do próprio armazenamento firebase, sob regras, talvez ?! #google #firebase existe uma oportunidade aqui para aprimorar a experiência do usuário.
— Rodrigo Rubio
@NickCarducci você pode estar certo e eu realmente gosto da facilidade anônima, embora preocupe que tenha um limite rígido de 10 milhões de memória. Isso pode ser perigoso quando você tem um aplicativo da web para uma campanha de TV, por exemplo, onde ninguém deve fazer login ou se registrar.
Só quero acrescentar algo à resposta. Basta acessar seu projeto no console do google (console.cloud.google.com/home) e selecionar seu projeto. Aí abra o terminal e apenas crie o arquivo cors.json ( touch cors.json) e então siga a resposta e edite este arquivo ( vim cors.json) conforme sugerido por @ frank-van-puffelen
Isso funcionou para mim. Felicidades!
O console da web em console.cloud.google.com/home estava apresentando um erro, mas funcionou bem com o Google Cloud SDK Shell.
— FiringBlanks
... Aí abra o terminal e ... Como você abre o terminal? Não vejo o botão "Abrir terminal" no link
Certifique-se de estar no cloudsubdomínio, não no subdomínio firebase("console.cloud.google.com/home") e procure o >_botão do ícone no canto superior direito.
— Chris Villa
outra abordagem para fazer isso é usar a API JSON do Google. etapa 1: obter token de acesso para usar com a API JSON Para obter um token de uso, vá para: https://developers.google.com/oauthplayground/ Em seguida, pesquise por API JSON ou armazenamento Selecione as opções necessárias, ou seja, ler, gravar, full_access (marque essas que são obrigatórios) Siga o processo para obter o Token de Acesso, que será válido por uma hora. Etapa 2: use o token para acessar a API JSON do google para atualizar o CORS
Amostra de onda:
— nimesh makwana
Gostaria de acrescentar para aqueles que precisam desesperadamente de uma solução como eu estava depois de tentar tudo isso e não resolver o problema. Encontrei um ótimo artigo online que oferece 3 soluções, e a primeira funcionou para mim .. um plugin do Google Chrome .. sim! ..
extensão moesif CORS Certifique-se de ligá-la após a instalação
— Rolando Niubó
Isso realmente não resolve o problema do usuário desconhecido em campo - apenas para uma única máquina.
— Elemental de
Para acessar qualquer recurso com um cabeçalho CORS aplicado, você poderia usar um pequeno projeto que fiz em Golang para mim - https://proxify-cors.herokuapp.com/