PS PrestaShop Iniciante

DataFirefly Magic Link: início de sessão sem palavra-passe

Instalar e configurar o início de sessão sem palavra-passe por ligação de e-mail no PrestaShop 8 e 9.

Atualizado Versão do módulo 1.0.0

Apresentação

O DataFirefly Magic Link acrescenta um início de sessão sem palavra-passe à sua loja PrestaShop 8 ou 9. O cliente introduz o seu endereço de e-mail na página de início de sessão, recebe uma ligação segura de uso único, clica, confirma, e fica com sessão iniciada. O formulário clássico com identificador e palavra-passe continua disponível: o magic link acrescenta-se a ele, não o substitui.

O módulo é totalmente autónomo: nenhuma dependência Composer, nenhum serviço externo, nenhuma chamada a CDN. Tudo funciona com o sistema de e-mails nativo do PrestaShop.

Adaptação para Portugal: os modelos de e-mail são fornecidos em francês, inglês, espanhol e alemão. Para os clientes com conta em português, crie a pasta mails/pt/ a partir da versão en/ e traduza os dois ficheiros; caso contrário, o PrestaShop enviará o e-mail no idioma de reserva.

Pré-requisitos

  • PrestaShop 8.0 a 9.x
  • PHP 8.1 ou superior
  • MySQL 5.7+ ou MariaDB 10.3+
  • Envio de e-mails funcional (se os seus e-mails de confirmação de encomenda são enviados, está tudo bem)

Instalação

  1. No back-office, abra Módulos > Gestor de módulos.
  2. Clique em Instalar um módulo e selecione o ficheiro dfmagiclink.zip.
  3. O PrestaShop instala o módulo, cria a tabela ps_dfmagiclink_token e regista os hooks automaticamente.
  4. Clique em Configurar para abrir a página de definições.

Logo após a instalação, o formulário magic link aparece por baixo do formulário de início de sessão padrão da sua loja, com as definições por defeito (ligações válidas 15 minutos, limitação de pedidos ativa).

Configuração

Todas as definições estão em Módulos > Gestor de módulos > DataFirefly Magic Link > Configurar.

Interruptor geral. Em Não, o formulário desaparece do front-office e as ligações existentes deixam de funcionar (mensagem explícita para o cliente).

Mostrar na página de início de sessão

Controla a injeção do formulário por baixo do login padrão. Pode desativar a apresentação mantendo o módulo ativo, por exemplo se integrar o formulário noutro sítio através do seu tema.

Duração de validade (minutos)

Tempo durante o qual uma ligação permanece utilizável após a emissão. Por defeito: 15 minutos. Mínimo 1, máximo 1440 (24 horas). Recomendamos ficar entre 15 e 60 minutos: tempo suficiente para a entrega dos e-mails, curto o suficiente para limitar a janela de exposição.

Máx. de pedidos por IP / hora

Limite de pedidos de ligação aceites a partir de um mesmo endereço IP numa hora deslizante. Por defeito: 5. Protege contra tentativas de abuso automatizadas.

Máx. de pedidos por e-mail / hora

Limite de pedidos para uma mesma conta de cliente numa hora deslizante. Por defeito: 3. Acima disso, os pedidos são silenciosamente ignorados (a mensagem apresentada continua genérica para não revelar o estado da conta).

Durante os seus testes, lembre-se de aumentar temporariamente estes limites ou de esvaziar a tabela ps_dfmagiclink_token, caso contrário atingirá rapidamente o limite de 3 pedidos por hora na sua própria conta.

Redirecionamento após início de sessão

Página para a qual o cliente é enviado após um início de sessão bem-sucedido: A minha conta (por defeito), Histórico de encomendas ou Página inicial.

Estatísticas e limpeza

Três contadores no topo da página de configuração: tokens ativos, inícios de sessão nas últimas 24 horas, ligações emitidas em 24 horas. O botão Limpar os tokens expirados elimina os tokens caducados e os tokens consumidos há mais de 24 horas.

Percurso do cliente

  1. O cliente abre a página de início de sessão e introduz o seu e-mail no bloco «Início de sessão sem palavra-passe».
  2. O módulo verifica a conta, gera um token de 256 bits, guarda o seu hash SHA-256 e envia o e-mail. A resposta no ecrã é deliberadamente genérica («Se existir uma conta para este e-mail…») para impedir a enumeração de contas.
  3. O cliente clica no botão do e-mail e chega a uma página de confirmação autónoma que mostra o seu nome próprio.
  4. Clica em «Iniciar sessão»: o token é consumido, a sessão PrestaShop é aberta, os hooks de autenticação nativos são acionados, e é redirecionado para a página configurada.

Porquê uma página de confirmação? O Outlook Safe Links, o Gmail e os antivírus empresariais visitam automaticamente as ligações dos e-mails recebidos. Sem este passo, esses scanners consumiriam a ligação antes do cliente. O token só é consumido no clique real (pedido POST), nunca na simples visita (GET). É o padrão usado pelo Slack, Notion e Vercel.

E-mails

Os modelos estão em modules/dfmagiclink/mails/<idioma>/ (fr, en, es, de), em HTML (magiclink.html) e texto simples (magiclink.txt). O idioma do e-mail segue automaticamente o idioma da conta do cliente.

Variáveis disponíveis: {firstname}, {lastname}, {email}, {magic_link}, {ttl}, {shop_name}, {ip}.

Para personalizar um modelo, copie-o para a pasta mails do seu tema (themes/o-seu-tema/modules/dfmagiclink/mails/) de forma a preservar as suas alterações nas atualizações do módulo.

Segurança

  • Tokens de 256 bits gerados através de random_bytes(), codificados em base64 URL-safe.
  • Hash SHA-256 na base de dados: o token em bruto só existe no e-mail. Uma fuga da tabela não dá nenhuma ligação explorável.
  • Uso único estrito: o token é marcado como consumido antes da abertura de sessão.
  • Anti-enumeração: resposta idêntica quer a conta exista ou não.
  • Limitação dupla de pedidos por IP e por conta.
  • CSRF: o pedido AJAX é protegido pelo token de segurança nativo do PrestaShop.
  • noindex: todas as páginas do módulo têm o cabeçalho X-Robots-Tag: noindex, nofollow, noarchive.

Resolução de problemas

O e-mail não chega

Verifique por ordem: a pasta de spam do cliente (SPF/DKIM do seu domínio), a limitação de pedidos (contador «ligações emitidas» na configuração) e o estado ativo da conta do cliente. Pode confirmar a emissão do lado do servidor consultando a tabela ps_dfmagiclink_token: deve aparecer uma linha com used_at a NULL após cada pedido.

«Esta ligação expirou ou já foi utilizada»

A ligação ultrapassou a sua duração de validade ou já foi usada. O cliente pode simplesmente pedir uma nova ligação a partir da página de início de sessão.

O formulário não aparece na página de início de sessão

Verifique que «Mostrar na página de início de sessão» está ativo e esvazie depois a cache (Parâmetros avançados > Desempenho > Limpar a cache). Verifique também que o seu tema executa o hook displayCustomerLoginFormAfter: é o caso dos temas Classic e Hummingbird e da quase totalidade dos temas do mercado.

Desinstalação

A desinstalação elimina a tabela ps_dfmagiclink_token e todos os valores de configuração. Nenhuma conta de cliente é modificada, nenhuma palavra-passe é tocada. O início de sessão padrão continua a funcionar normalmente.

Esta página foi útil?

Ainda com dúvidas? Contacte o suporte