Configurações do Magento 2

Desativar o 2FA do Magento 2 no ambiente local sem quebrar o admin

Dump de produção restaurado na máquina, você abre o /admin e o Magento pede o código do autenticador. O e-mail com o QR nunca vai chegar, porque o ambiente local não manda e-mail. Resolve na CLI — e só no local: em produção, admin sem dois fatores é convite pra tomarem o painel.

Os dois módulos têm que cair juntos

Do 2.4.6 em diante não basta derrubar o Magento_TwoFactorAuth. A Adobe separou a integração com o Adobe IMS num módulo próprio, o Magento_AdminAdobeImsTwoFactorAuth, que pede magento/module-two-factor-auth no composer.json dele. Desligar só um faz o comando abortar reclamando de dependência. Os dois no mesmo module:disable resolvem:

cd /var/www/loja
bin/magento module:disable Magento_TwoFactorAuth Magento_AdminAdobeImsTwoFactorAuth
bin/magento module:status Magento_TwoFactorAuth
bin/magento cache:flush

Se a cópia está em modo production, o cache:flush não basta — o próprio comando avisa que os arquivos gerados foram limpos e manda rodar o setup:di:compile. Sem isso o admin volta com erro de classe não encontrada. Se o módulo tinha view files, o module:disable ainda aceita a flag –clear-static-content.

A armadilha do app/etc/config.php

module:disable não é configuração de ambiente: ele grava 0 na lista de módulos do app/etc/config.php, arquivo que na maioria dos projetos está versionado no Git. Commitou sem olhar e o próximo deploy leva o dois fatores desligado pra loja de verdade.

O que eu faço aqui é desligar, trabalhar e devolver o arquivo antes de subir qualquer coisa, com um git checkout app/etc/config.php. Se o time inteiro usa a mesma base, vale combinar que esse arquivo nunca entra em commit de tarefa.

Precisa manter o 2FA ligado e só perdeu o segredo de um usuário? O Magento_TwoFactorAuth expõe security:tfa:reset, security:tfa:providers e security:tfa:google:set-secret. Um bin/magento list security mostra o que a sua versão tem — dá pra resetar o provedor de um admin específico sem derrubar o módulo pra todo mundo.

Post Recentes

Prompt injection em campo de usuário: isole a observação do pedido

A observação do pedido chegou com ordem embutida para gerar cupom. Delimite o texto do cliente e trate a resposta…

10 horas atrás

Preço promocional em massa no WooCommerce: agendar a Black Friday pelo WP-CLI

Um CSV com SKU e preço, um wp eval-file que agenda início e fim da promoção guardando o estado anterior,…

15 horas atrás

Too many connections no MySQL: achar quem segura as conexões antes de subir o limite

O erro 1040 aparece quando todas as conexões estão ocupadas. Antes de subir o max_connections, veja quem está segurando cada…

1 dia atrás

WP_MEMORY_LIMIT no WordPress: resolver memória esgotada no PHP 8.3

Allowed memory size exhausted no painel: qual das duas constantes do wp-config.php mexer, onde conferir o valor real e por…

2 dias atrás

Converter data dd/mm/aaaa para o MySQL com DateTime::createFromFormat

strtotime com data brasileira devolve false e o INSERT quebra no MySQL 8. Use createFromFormat com getLastErrors antes de mandar…

4 dias atrás

Erro 500 no Magento 2: achar o relatório em var/report pelo ID da tela

O hash que o Magento mostra junto do erro é o nome de um arquivo em var/report. Veja como abrir,…

5 dias atrás