Cloudflare

Como parar de aprovar login no Wrangler com um API Token da Cloudflare

Configure CLOUDFLARE_API_TOKEN e o Account ID no Mac, Linux ou Windows para o Wrangler autenticar sozinho, sem abrir o navegador a cada sessão.

Assistir ao vídeo original no YouTube
Thumbnail do vídeo: Pare de Aprovar Login no Wrangler da Cloudflare Toda Vez

Eu estava usando o Wrangler no terminal, a IA seguia o deploy, e do nada a sessão parava. O CLI pedia para autenticar de novo e esperava eu clicar em Permitir no navegador. Uma vez até passa. Quando o terminal fica aberto por horas, ou quando ele fecha e reabre, isso vira rotina. A correção não é outro login: é colocar o API Token e o ID da conta em variável de ambiente.

Crie um API Token no painel da Cloudflare, grave CLOUDFLARE_API_TOKEN e CLOUDFLARE_ACCOUNT_ID no sistema e teste com npx wrangler whoami. O Wrangler lê o token sozinho e deixa de abrir a tela de aprovação a cada sessão.

Problema
OAuth do wrangler login pede aprovação de novo
Solução
CLOUDFLARE_API_TOKEN e CLOUDFLARE_ACCOUNT_ID
Conferência
npx wrangler whoami

O Wrangler trava esperando você clicar em Permitir

Quem publica Cloudflare Workers pelo terminal já viu a sequência: wrangler login, navegador, conta, Permitir. O fluxo OAuth é o caminho oficial para uso interativo. O incômodo aparece quando a sessão não dura o suficiente. Você fecha o terminal, deixa a IA trabalhando, volta depois de algumas horas, e o CLI pede autenticação outra vez. A automação não falha por código. Ela espera um clique que ninguém está olhando.

Isso vale para o Wrangler e, na prática, para qualquer CLI que autentica abrindo o navegador. Vercel e outras ferramentas fazem o mesmo tipo de consentimento. Enquanto a aprovação depender de uma janela, o computador não consegue seguir sozinho. A IA até monta o site e chama o deploy; se o token da sessão expirou, ela fica parada na mesma tela.

O Wrangler é a linha de comando oficial da Cloudflare. Com ele você publica Worker, ajusta rota, mexe em banco e evita ir ao painel web a cada alteração. Se a IA já escreve o projeto e já dispara o comando, a autenticação precisa existir no ambiente, não na sua atenção.

A variável de ambiente substitui o wrangler login

A solução que eu uso é simples: em vez de rodar wrangler login, eu gravo uma variável de ambiente com o API Token e outra com o ID da conta. Variável de ambiente é um nome e um valor que o sistema entrega para o terminal e para qualquer programa que consulte esse ambiente. Pode ser um caminho, uma URL ou uma chave que não aparece na tela.

No Wrangler, os nomes oficiais são CLOUDFLARE_API_TOKEN e CLOUDFLARE_ACCOUNT_ID. Com o token no ambiente, o CLI autentica sem OAuth. A documentação da Cloudflare trata isso como o caminho para CI, scripts e qualquer execução que não pode abrir navegador. No meu computador o efeito é o mesmo: a IA chama o Wrangler e ele segue, sem a tela de Permitir.

O token do ambiente tem prioridade sobre as credenciais salvas pelo wrangler login. Se as duas existirem, vale o API Token. Por isso o teste depois da configuração precisa mostrar que o Wrangler está lendo CLOUDFLARE_API_TOKEN, e não um OAuth antigo.

Criar o API Token no painel da Cloudflare

No vídeo eu abri o painel, fui em Gerenciar a conta e em Tokens de API da conta. A Cloudflare também deixa criar token em Meu perfil, em API Tokens; a diferença é token de usuário versus token da conta. Os dois servem para o Wrangler desde que as permissões cubram o que você vai fazer.

Na criação, o ponto que importa é a permissão, não o nome bonito. Eu marquei edição de Cloudflare Workers. Quanto mais regra você libera, mais o Wrangler consegue fazer: publicar, ler, escrever, mexer em recurso da conta. Também dá para somar leitura ampla e escrita ampla. Eu não trato isso como obrigação. Um token que edita Worker resolve o deploy do dia a dia. Um token com tudo resolve quando a IA também cria D1, ajusta DNS ou lê a conta inteira. O outro lado é óbvio: se o token vazar, o estrago segue as permissões que você deu.

Tem filtro de IP, se o seu for fixo. Na maior parte dos casos domésticos o IP muda, então eu deixo aberto. Tem prazo de validade. Eu deixei sem expiração para não acordar um dia com o Wrangler mudo. A Cloudflare mostra o segredo uma vez. Copie, cole num lugar que só você vê e não jogue no repositório.

  1. Abra o painel da Cloudflare e entre em Gerenciar a conta > Tokens de API da conta, ou em Meu perfil > API Tokens.
  2. Clique em Criar token. Use um modelo com edição de Workers ou monte um token personalizado com as permissões que o Wrangler vai precisar.
  3. Restrinja o recurso à conta (e à zona, se fizer sentido). Evite permissão de escrita em tudo se o uso for só publicar Worker.
  4. Opcional: filtre por IP se ele for fixo. Opcional: defina validade. Eu deixei sem expiração para o token não cair no meio de um deploy.
  5. Revise o resumo, crie o token e copie o segredo na hora. Ele não volta a aparecer por completo.
  6. Guarde o valor fora do Git. Quem tiver o token age com as permissões que você marcou.

Configurar no Mac, no Linux e no Windows

No Mac e no Linux o caminho é o arquivo do shell. No zsh, o mais comum no Mac, isso é ~/.zshrc. No bash, ~/.bashrc ou ~/.bash_profile. Você exporta as duas variáveis, recarrega o arquivo e abre um terminal novo. Dá para pedir para a IA montar a linha, mas o conteúdo é sempre o mesmo: o nome oficial, o token entre aspas, o ID da conta entre aspas.

No Windows eu não gravei a tela, porque não estava no Windows. A configuração existe na interface gráfica e no terminal. Pelo painel, você cria uma variável de usuário com o nome e o valor. Pelo CMD, setx grava para o usuário. No PowerShell, SetEnvironmentVariable faz o mesmo. Depois de setx, o terminal atual ainda não vê o valor: feche e abra outro.

A Cloudflare também aceita um arquivo .env na pasta do projeto, com as mesmas chaves. Isso ajuda em um repositório isolado. Eu mostrei a variável de sistema porque o problema da gravação era outro: qualquer pasta, qualquer sessão, a IA chama o Wrangler e ele já autenticou.

  1. Mac ou Linux com zsh: acrescente no ~/.zshrc as linhas export CLOUDFLARE_API_TOKEN="seu-token" e export CLOUDFLARE_ACCOUNT_ID="id-da-conta". Rode source ~/.zshrc ou abra um terminal novo.
  2. Linux ou Mac com bash: as mesmas linhas vão para ~/.bashrc (ou ~/.bash_profile no Mac). Recarregue com source ~/.bashrc.
  3. Windows pela interface: Windows + R, sysdm.cpl, Avançado, Variáveis de ambiente. Em Variáveis do usuário, Novo. Nome CLOUDFLARE_API_TOKEN, valor o token. Repita para CLOUDFLARE_ACCOUNT_ID. Feche todos os terminais e abra outro.
  4. Windows no CMD: setx CLOUDFLARE_API_TOKEN "seu-token" e setx CLOUDFLARE_ACCOUNT_ID "id-da-conta". Abra um CMD novo; o atual não herda o setx.
  5. Windows no PowerShell: [Environment]::SetEnvironmentVariable("CLOUDFLARE_API_TOKEN","seu-token","User") e o equivalente para CLOUDFLARE_ACCOUNT_ID. Abra uma janela nova.
  6. Confira no terminal novo: no Unix, echo $CLOUDFLARE_API_TOKEN deve imprimir o token. No PowerShell, echo $env:CLOUDFLARE_API_TOKEN.

O Account ID e o teste com wrangler whoami

Além do token, o Wrangler precisa saber de qual conta está falando. O CLOUDFLARE_ACCOUNT_ID é esse identificador. No vídeo eu olhei o valor na URL do painel. A documentação oficial dá caminhos mais estáveis: a busca do dashboard com Copy account ID, a seção Account Details em Workers & Pages, ou o bloco API na visão geral do domínio. Os três apontam para o mesmo ID. Não use o Zone ID no lugar; zona é o domínio, conta é a conta.

Com as duas variáveis no ambiente, o Wrangler detecta sozinho. Não precisa passar flag extra no deploy. O teste que eu rodei foi npx wrangler whoami. A saída disse que estava usando o API Token lido de CLOUDFLARE_API_TOKEN e mostrou o ID da conta, o mesmo da URL. Se aparecer OAuth Token e o e-mail da sessão antiga, o ambiente não chegou no processo. Feche o terminal, confira o nome da variável (é CLOUDFLARE_API_TOKEN, não CF_API_TOKEN) e rode de novo.

whoami não publica nada. Só pergunta quem você é. Se essa leitura funcionar, o próximo wrangler deploy usa o mesmo token. Se a IA ainda pedir login, ela está em um terminal que nasceu antes da variável, ou o token não tem permissão para a operação. Aí o conserto é permissão no painel, não outro clique em Permitir.

  1. Copie o Account ID: no painel, busque Copy account ID, ou abra Workers & Pages e copie Account ID em Account Details.
  2. Confirme que CLOUDFLARE_ACCOUNT_ID no sistema é esse valor, não o Zone ID do domínio.
  3. Em um terminal novo, rode npx wrangler whoami.
  4. Leia a saída: ela precisa dizer que o API Token veio de CLOUDFLARE_API_TOKEN e listar a conta certa.
  5. Se whoami passar e o deploy falhar com erro de autenticação, volte ao token e acrescente a permissão que a operação pede, em vez de rodar wrangler login.

Na sequência

  1. Criar um API Token com permissão de edição de Workers (e o restante só se a tarefa pedir).
  2. Copiar o segredo na hora da criação e não versioná-lo.
  3. Anotar o Account ID pelo painel, não pela memória da URL.
  4. Gravar CLOUDFLARE_API_TOKEN e CLOUDFLARE_ACCOUNT_ID no Mac, Linux ou Windows.
  5. Abrir um terminal novo e rodar npx wrangler whoami antes do próximo deploy.

Onde isso quebra

Continuar usando wrangler login no mesmo computador: o token do ambiente deve vencer o OAuth, mas um terminal antigo ou uma variável com nome velho (CF_API_TOKEN) deixa a sessão confusa.

Colocar o token no código, no chat ou no wrangler.jsonc. Variável de ambiente e secret existem para o valor não andar no repositório.

Dar permissão de escrita em toda a conta para um token que só publica um Worker. Se vazar, o alcance é o da permissão.

Testar whoami no mesmo terminal em que o setx acabou de rodar no Windows. A janela atual ainda não viu a variável.

Perguntas frequentes

wrangler login deixa de ser necessário depois do API Token?

Para o computador em que as variáveis existem, sim. O Wrangler lê CLOUDFLARE_API_TOKEN e não abre o navegador. Em outra máquina, ou em CI sem o token, o login OAuth continua sendo o fluxo interativo.

Qual permissão o token precisa ter para o Wrangler publicar um Worker?

Edição de Cloudflare Workers na conta certa. Se a IA também cria D1, R2 ou DNS, cada recurso pede a própria permissão. Comece pelo Workers e amplie quando o comando falhar por falta de acesso.

Como achar o Account ID sem copiar a URL do painel?

No dashboard, busque Copy account ID. Em Workers & Pages, o ID aparece em Account Details. Na visão geral de um domínio, o bloco API mostra Account ID e Zone ID; use o da conta.

Posso colocar o token só no .env do projeto?

Sim. A Cloudflare documenta um .env na pasta com CLOUDFLARE_API_TOKEN e CLOUDFLARE_ACCOUNT_ID. Isso vale para aquele projeto. A variável de sistema vale para qualquer pasta e para a IA que abre um terminal novo.

O que o wrangler whoami precisa mostrar para eu considerar pronto?

Que a autenticação veio do API Token em CLOUDFLARE_API_TOKEN e que a conta listada é a sua. Se ainda aparecer OAuth Token, a variável não chegou nesse processo.

O mesmo cuidado com credenciais aparece em como evitar o acúmulo de chaves de API em projetos com IA e em como proteger um site feito com IA na Cloudflare.