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

> 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…

- Página: <https://www.datafirefly.com/pt/documentation/dfmagiclink/>
- Idioma: pt
- Atualizado em: 2026-09-02
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfmagiclink/index.md), [en](https://www.datafirefly.com/en/documentation/dfmagiclink/index.md), [es](https://www.datafirefly.com/es/documentation/dfmagiclink/index.md), [de](https://www.datafirefly.com/de/documentation/dfmagiclink/index.md), [it](https://www.datafirefly.com/it/documentation/dfmagiclink/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfmagiclink/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfmagiclink/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## 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**.

### Ativar Magic Link

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//` (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.
