Login sem senha com magic links: checklist de UX e segurança
Checklist de login sem senha com magic links para UX e segurança: expiração, uso único, regras de substituição, sessões de dispositivo e noções básicas de entregabilidade de e-mail.

O que é login por magic link e o que pode dar errado
Um magic link é um link de login de uso único enviado para seu e-mail. Em vez de digitar uma senha, você abre o e-mail, toca no link e fica logado.
Isso funciona bem quando as pessoas odeiam senhas, as esquecem com frequência ou entram apenas ocasionalmente. Também reduz o reuso de senha entre sites, já que não existe senha para repetir. Mas isso não elimina a necessidade de segurança — apenas move a principal “chave” para a caixa de entrada do e-mail.
Esse é o ponto de atenção: o login sem senha com magic links é tão seguro quanto a conta de e-mail do usuário e a capacidade dele de manter o acesso privado. Se alguém consegue ler seu e-mail, muitas vezes pode se passar por você.
Aqui estão as maneiras mais comuns de magic links falharem na prática:
- O acesso à caixa de entrada é roubado (senha de e-mail obtida por phishing, SIM swap para recuperação de e-mail, malware ou computador compartilhado deixado logado).
- O link é encaminhado (de propósito ou por acidente) e a pessoa errada o usa.
- O usuário abre o e-mail em um dispositivo, mas quer a sessão em outro, e fica confuso quando o app abre no “lugar errado”.
- Um dispositivo compartilhado fica logado e a próxima pessoa tem acesso.
- O endereço de e-mail foi digitado errado e o link de login vai para outra pessoa.
Um exemplo simples: alguém pede um link em um laptop do trabalho e depois confere o e-mail no celular pessoal. Ao tocar no link, o celular o autentica, e o laptop continua na tela de login. Se seu fluxo não explica o que aconteceu, aparecem chamados de suporte.
Se você constrói isso em um produto feito com AppMaster, trate o passo do e-mail como uma ação sensível, não apenas uma comodidade. Mensagens claras, links de curta duração e controles simples de sessão são o que deixam a experiência segura.
O login por e-mail sem senha é adequado para seu produto?
O login sem senha com magic links funciona melhor quando o objetivo é acesso rápido com pouca fricção, e não proteção máxima. É uma boa escolha para produtos em que as pessoas entram ocasionalmente e detestam redefinir senhas, e onde a caixa de entrada já é a “base” do usuário.
Uma forma simples de decidir: se alguém acessar a conta errada, qual é o pior dano realista? Se a resposta for “irritante, mas recuperável”, magic links podem ser um bom padrão.
Bons casos de uso incluem:
- Apps de baixo a médio risco (ferramentas internas, painéis administrativos para pequenas equipes, portais de clientes com permissões limitadas)
- Produtos com usuários esporádicos que detestam redefinir senha
- Experiências de “me coloque dentro rápido”, como suporte, onboarding ou aprovações
- Produtos em estágio inicial que precisam reduzir chamados de suporte
Seja cauteloso ou evite magic links como único método quando:
- Contas têm alto valor (movimentação de dinheiro, grandes saldos, ações irreversíveis)
- Você armazena dados regulados ou sensíveis (saúde, assuntos jurídicos, registros financeiros detalhados)
- Usuários costumam compartilhar caixas de e-mail (mailboxes compartilhadas, contas de recepção)
- Seu público é alvo provável (executivos, administradores, cargos com alto privilégio)
Se seu produto tem momentos sensíveis em vez de contas sensíveis, use o login por e-mail para entrada e então adicione um segundo fator ou verificação step-up para ações de risco. Por exemplo, exija confirmação extra ao mudar dados de pagamento, exportar dados ou adicionar um novo administrador.
Também decida o que o e-mail pode fazer. Magic links apenas para login são mais seguros e fáceis de justificar. "Login + recuperação de conta" é conveniente, mas significa que quem tem acesso ao e-mail pode tomar conta da conta. Se você permite alteração do endereço de e-mail, trate isso como ação de alto risco.
Se você está construindo um app em uma plataforma no-code como AppMaster, essa decisão ainda importa: a UI pode ser simples, mas sua política sobre ações sensíveis e recuperação deve ser explícita desde o primeiro dia.
Fluxo básico do magic link (e as decisões dentro dele)
Magic links parecem simples para os usuários, mas muitas pequenas escolhas ficam por baixo. Um fluxo limpo mantém as pessoas em movimento e reduz chamados de suporte.
O que o usuário vê
A maioria dos produtos segue o mesmo caminho: o usuário digita um e-mail, recebe uma mensagem, toca no link e entra logado.
Uma melhoria comum é uma etapa final de confirmação depois que o link abre. Em vez de autenticar instantaneamente, você mostra uma tela curta como “Confirme o login no Acme” com um único botão. Isso ajuda quando alguém toca no link no dispositivo errado ou quando o e-mail foi aberto por uma ferramenta de preview.
No mobile, decida o que “tocar no link” significa. Se você tem um app nativo, a melhor experiência costuma ser: tocar no link -> abrir o app -> finalizar o login. Se o app não estiver instalado, faça fallback para web móvel e ofereça uma opção “Abrir o app” depois.
Decisões que você deve tomar
Antes de implementar login sem senha com magic links, defina estas regras para que a experiência seja previsível:
- Onde o link abre: navegador embutido, navegador do sistema ou diretamente no app nativo (deep link).
- Se o login é automático ou exige uma tela final de confirmação.
- O que fazer se o usuário já estiver logado quando tocar no link.
- O que acontece se o e-mail for alterado no meio do fluxo ou se o usuário digitar outro e-mail na próxima tentativa.
- O que significa “sucesso”: ir para a última página, para a tela inicial padrão ou para a página que disparou o login.
Usuários já logados é fácil de esquecer. Se um usuário que já está logado tocar em um novo magic link, você pode (a) mantê-lo na mesma conta e mostrar “Você já está logado”, ou (b) tratar como troca de conta e pedir confirmação. Para apps feitos em AppMaster (como portais de clientes ou ferramentas internas), a opção (a) costuma ser mais segura, a não ser que troca de conta seja um recurso real.
Regras de expiração: curto o suficiente para ser seguro, longo o bastante para funcionar
Um magic link só é “sem senha” se parecer descomplicado. A expiração é a parte que pode quebrar essa promessa silenciosamente. Curta demais, e as pessoas encontram links expirados na caixa de entrada e desistem. Longa demais, e um e-mail encaminhado ou exposto vira risco maior.
Um ponto de partida prático para login sem senha com magic links é uma janela de expiração entre 10 e 30 minutos. Janelas mais curtas (3 a 10 minutos) servem para ações de maior risco, como entrar em área de admin ou aprovar um pagamento. Janelas mais longas (30 a 60 minutos) podem funcionar em apps de baixo risco, mas só se você tiver controles fortes de sessão e bom gerenciamento de dispositivos.
Deixe a expiração clara no e-mail e na tela “Verifique seu e-mail”. Não esconda em texto pequeno. Use uma frase simples como “Este link expira em 15 minutos.” Se puder, mostre uma contagem regressiva na tela de espera, mas não confie no relógio do dispositivo do usuário para precisão.
Atrasos de e-mail e diferenças de relógio são comuns. Alguns provedores seguram mensagens por alguns minutos, e alguns usuários abrem o e-mail em um dispositivo diferente de onde solicitaram. Algumas regras ajudam a evitar confusão:
- Trate a expiração com o tempo do servidor, não o do usuário.
- Se o link estiver perto de expirar, mostre uma mensagem clara como “Link expirado. Solicite outro.”
- Se o link ainda for válido mas já tiver sido usado, diga isso diretamente (e ofereça um próximo passo rápido).
Quando um link expira, a melhor experiência é um reenvio com um toque a partir da página de destino. Mantenha seguro: só permita reenviar após um curto cooldown e evite revelar se um e-mail existe no seu sistema. A página pode dizer “Se este e-mail estiver registrado, enviaremos um novo link.”
Um detalhe que reduz chamados: inclua o e-mail exato para o qual o link foi enviado (parcialmente mascarado) na tela de espera, mais uma opção “Alterar e-mail”. Se você está construindo o fluxo em uma ferramenta no-code como AppMaster, normalmente são poucos estados de UI, mas isso previne muita confusão “Nunca recebi o e-mail”.
Uso único e regras de reuso (as partes que o usuário realmente encontra)
Para a maioria dos produtos, adote por padrão magic links de uso único. Isso protege usuários de acidentes comuns como encaminhamento de e-mail, caixas compartilhadas ou alguém reabrindo uma mensagem antiga semanas depois. Facilita também o suporte: se um link foi usado, ele não volta a valer.
A chave é decidir o que “usado” significa na prática. Pessoas clicam duas vezes, abrem no dispositivo errado ou tocam no link na pré-visualização do e-mail. Suas regras devem ser seguras, mas também parecer justas.
O que deve acontecer quando o mesmo link é aberto duas vezes?
Um bom baseline: o primeiro login bem-sucedido consome o token, e qualquer abertura posterior mostra uma mensagem clara como “Este link já foi usado. Solicite um novo.” Evite erros vagos. Se quiser reduzir frustração, pode oferecer uma pequena janela de segurança antes do consumo — por exemplo: marcar como usado apenas depois que a sessão for criada.
Aqui estão padrões amigáveis ao usuário que continuam seguros:
- Se o link for aberto novamente no mesmo dispositivo e o usuário já estiver logado, leve-o ao app (sem mostrar mensagem).
- Se o link for aberto de novo mas não existir sessão ativa, mostre “Usado ou expirado” e um botão único para enviar outro link.
- Se o link for aberto em outro dispositivo depois de ter sido usado, trate como inválido e solicite um link novo.
Se os usuários solicitarem vários links, os antigos morrem?
Decida isso e seja consistente. O padrão mais seguro é: cada nova solicitação invalida todos os links pendentes anteriores. Isso limita o dano se alguém obtiver acesso à caixa de entrada mais tarde.
Se você mantiver múltiplos links válidos ao mesmo tempo, precisará de proteções mais fortes (expiração curta, uso único estrito e controles claros de dispositivo/sessão). Caso contrário, o login sem senha com magic links pode se transformar em chaves de acesso de longa duração nas caixas de entrada.
Evite links reutilizáveis que funcionam repetidamente. Mesmo se parecer conveniente, isso treina usuários a tratar o e-mail como chave permanente e dificulta conter um takeover.
Se você constrói o fluxo em uma ferramenta no-code como AppMaster, escreva essas regras em linguagem simples (válido, usado, expirado, substituído) para que as mensagens da UI correspondam ao que o backend realmente aplica.
Detalhes de UX que reduzem confusão e chamados de suporte
A maioria dos chamados sobre magic links não são bugs de segurança. São “Nunca recebi o e-mail”, “Cliquei e nada aconteceu” ou “Isso é phishing?”. Boa UX previne os três.
Depois que o usuário envia o e-mail, mostre uma tela dedicada “Verifique seu e-mail” em vez de um pequeno toast. Seja calmo e específico: diga para qual endereço você enviou, o que fazer a seguir e o que tentar se não chegar.
Uma tela de verificação forte costuma incluir:
- O e-mail exato usado, com opção clara “Alterar e-mail”
- Um botão de reenviar com contagem regressiva curta (para evitar spam de cliques)
- Uma nota sobre tempo típico de entrega (por exemplo, “Normalmente chega em 1 minuto”)
- Um lembrete suave para checar spam, abas de promoções e filtros da empresa
- Uma linha curta sobre segurança: “Não encaminhe este link”
A confiança começa no próprio e-mail. Use nome do remetente e assunto consistentes e mantenha o conteúdo previsível. Adicione um ou dois detalhes que ajudem o usuário a ter certeza de que é legítimo, como “Solicitado a partir do Chrome no Windows” ou “Solicitado às 15:42”. Evite textos alarmantes. Simples é melhor: “Este link faz seu login. Se você não solicitou, pode ignorar este e-mail.”
Planeje também para a falha mais comum: e-mail atrasado ou filtrado. Sua UI não deve ser um beco sem saída. Se o link pode demorar, diga o que fazer enquanto espera e ofereça um fallback amigável.
Um fallback prático é incluir um código de uso único curto no mesmo e-mail do link. Então a tela de verificação pode oferecer “Inserir código em vez do link” para casos em que o link abre no dispositivo errado ou é bloqueado por um scanner de e-mail.
Um detalhe importante: se um usuário clicar em um link antigo ou já usado, mostre uma mensagem útil e uma ação clara como “Enviar um novo link”, não um erro genérico.
Noções básicas de segurança por trás das cenas (sem papo cripto pesado)
Um magic link é tão seguro quanto o token por trás dele. Trate esse token como uma chave temporária da conta: precisa ser difícil de adivinhar, de curta duração e utilizável somente da forma que você planejou.
Comece pela imprevisibilidade. Gere tokens longos e aleatórios (não baseados em e-mail, tempo ou IDs incrementais). Armazene o mínimo possível. Um padrão comum é guardar uma versão hasheada do token (para que, se o banco vazar, o link bruto não possa ser reutilizado) mais metadados suficientes para validá-lo.
Vincular o token a um contexto pode evitar encaminhamentos simples. Você nem sempre quer um vínculo estrito (as pessoas trocam de dispositivo), mas pode adicionar verificações leves para detectar abuso óbvio. Exemplos: vincular o token ao e-mail para o qual foi solicitado e, opcionalmente, a uma impressão digital grosseira como família do user agent ou a primeira faixa de IP vista. Se o contexto não bater, peça um link novo em vez de bloquear severamente.
Rate limiting importa mais do que matemática sofisticada. Sem ele, atacantes podem bombardear seu formulário de login, incomodar usuários e sondar se e-mails existem.
- Limite requisições por e-mail e por IP (incluindo reenvios)
- Adicione um cooldown curto entre e-mails (por exemplo, 30–60 segundos)
- Mostre a mesma mensagem seja o e-mail existente ou não
- Alerta para picos (muitos e-mails para muitos endereços)
Por fim, registre o que será útil quando um usuário disser “Eu não fiz isso.” Capture eventos como link solicitado, e-mail enviado, link aberto, token aceito/falhou (e por quê) e sessão criada. Inclua timestamp, IP e user agent. Em uma ferramenta construída com AppMaster, esses eventos podem ser gravados como parte do processo de login para que suporte e segurança tenham um rastro claro sem fuçar em logs de servidor.
Gerenciamento de dispositivos e sessões que usuários entendem
Magic links removem senhas, mas usuários ainda pensam em termos de dispositivos: “Entrei pelo celular” ou “Usei um laptop compartilhado.” Se você não der um jeito simples de ver e encerrar sessões, os chamados de suporte aumentam rápido.
Comece com uma decisão: quantas sessões ativas uma conta pode ter ao mesmo tempo. Para a maioria dos produtos consumidores, múltiplas sessões são aceitáveis (celular + laptop). Para ferramentas sensíveis (admin, finanças, ops internas), você pode limitar ou exigir um novo magic link quando um novo dispositivo aparecer.
Uma pequena página “Dispositivos” ou “Sessões ativas” facilita o entendimento. Mantenha-a simples e levemente imperfeita em vez de excessivamente precisa. Uma boa linha geralmente inclui:
- Nome do dispositivo (ou navegador e SO se não for possível detectar o modelo)
- Local aproximado (cidade ou região, não endereço completo)
- Última atividade
- Primeiro visto
- Um rótulo curto como “Este dispositivo” para a sessão atual
A partir daí, dê duas ações claras. “Sair” deve encerrar apenas aquela sessão. “Sair de todos os dispositivos” deve encerrar tudo, inclusive o dispositivo atual, e obrigar novos magic links em todos os lugares.
Entre essas ações, defina o que acontece quando um dispositivo é perdido ou compartilhado. O padrão mais seguro é: sair invalida todas as sessões existentes e quaisquer magic links pendentes já enviados. Usuários não precisam dos detalhes; precisam da garantia de que o acesso antigo foi removido.
Aqui vai um conjunto simples de comportamentos que raramente surpreendem o usuário:
- Novo login por magic link cria uma nova sessão
- Cada sessão tem timeout por inatividade (por exemplo, dias) e idade máxima (por exemplo, semanas)
- Mudar o e-mail aciona “sair de todos os dispositivos”
- “Sair de todos os dispositivos” também cancela links de login pendentes
Se você está construindo isso no AppMaster, pode modelar sessões no Data Designer, mostrá-las numa UI web/móvel básica e adicionar ações com um Business Process de um botão. Usuários terão a visão familiar de "sessões ativas" sem transformar isso num manual de segurança.
Ameaças e casos de borda: encaminhamento, e-mails compartilhados e erros de digitação
Magic links parecem simples, mas o e-mail é bagunçado. Pessoas encaminham mensagens, compartilham caixas e digitam endereços errado. Se você projetar só para o caso perfeito, vai acabar com bloqueios confusos e chamados de suporte difíceis de tratar.
Encaminhamento é a maior surpresa. Um login sem senha com magic links deve assumir que o link pode ser aberto por outra pessoa, em outro dispositivo, minutos ou horas depois. O baseline mais seguro é uso único mais uma mensagem clara “este link já foi usado”, com botão para solicitar um novo. Se quiser proteção extra, mostre uma confirmação leve depois do clique quando o dispositivo for novo (por exemplo, “Foi você?” mais uma opção rápida de cancelar que revoga a sessão).
Caixas compartilhadas precisam de decisão de produto, não só correção técnica. Se várias pessoas leem o mesmo e-mail (como support@ ou sales@), magic links viram acesso compartilhado por padrão. Considere exigir um passo adicional para contas de time (como convite para e-mail pessoal) ou deixar claro na UI que acesso ao e-mail equivale a acesso à conta.
Erros de digitação criam “contas-fantasma” e problemas de privacidade. Evite criar novas contas silenciosamente no primeiro login, a menos que seu produto realmente precise. Uma abordagem mais segura é confirmar a intenção no app antes de onbordar e manter a resposta do e-mail neutra (a mesma mensagem exista ou não a conta).
Aliases importam também. Decida como tratar plus-addressing (nome+tag@) e aliases do provedor:
- Trate e-mails como strings exatas (mais simples, menos surpresas)
- Ou normalize padrões comuns (menos contas duplicadas, mas risco de mesclar usuários que não esperavam)
Suporte é onde as coisas podem dar errado rápido. Não peça para usuários encaminharem e-mails, colarem tokens ou compartilharem screenshots de links. Em vez disso, ofereça ações simples no produto como “enviar novo link”, “sair de outros dispositivos” e “reportar que não fui eu”, para que o suporte ajude sem manusear dados sensíveis.
Checklist rápido antes de lançar
Antes de lançar login sem senha com magic links, decida o que você quer que aconteça no mundo real confuso: entrega lenta de e-mail, pessoas tocando no link duas vezes e usuários alternando entre celular e laptop.
Comece pelas regras que controlam risco e carga de suporte. Se essas estiverem erradas, a UI não salva.
- Defina uma janela clara de expiração (frequentemente 10–20 minutos) e mostre isso no e-mail e na tela “Verifique seu e-mail”.
- Faça links de uso único por padrão e defina o que “usado” significa (após o clique, após a criação bem-sucedida da sessão ou após a primeira abertura).
- Adicione limites de reenvio e ritmo (por exemplo, cooldown curto), além de mensagem amigável que explique por que não podem clicar em “enviar de novo” sem parar.
- Limite sessões ativas por usuário onde fizer sentido e decida o que acontece quando o limite é alcançado (manter o mais novo, o mais antigo ou pedir ação).
- Trate múltiplos cliques e links antigos de forma previsível: se o link estiver expirado ou usado, mostre uma página simples com uma ação primária (“Enviar um novo link”).
Depois, cheque as partes que os usuários realmente veem. A maioria das reclamações vem de e-mails pouco claros e comportamento móvel confuso.
- Conteúdo do e-mail: nome do remetente reconhecível, assunto claro, linguagem simples e uma linha curta “Não requisitou isto?” que explica o que fazer.
- Comportamento móvel: confirme o que acontece se o usuário abrir o e-mail em um dispositivo e quiser entrar em outro, e se você suporta deep links para o app.
- Cliques múltiplos: se o usuário tocar duas vezes, evite erros alarmantes; diga que já está logado ou que o link não é mais válido.
- Gerenciamento de dispositivos: forneça lista simples de dispositivos, opção “sair deste dispositivo” e notas básicas de auditoria (hora, dispositivo, localização se disponível).
- Recuperação: tenha um plano para “Não consigo acessar meu e-mail” (fluxo de suporte, verificação alternativa ou processo seguro de alteração de conta).
Se você está construindo isso no AppMaster, mapeie cada item do checklist para uma tela concreta e uma regra de negócio na lógica, para que o comportamento seja consistente em web e mobile.
Um exemplo realista: novo dispositivo, link expirado e limpeza
Maya trabalha em suporte. Na segunda-feira de manhã ela abre o portal do cliente em um laptop novo. Digita o e-mail do trabalho e toca em “Enviar link de login”. O e-mail chega com um magic link que expira em 10 minutos.
Ela clica, o navegador abre e ela entra no portal. Nos bastidores, o link é aceito uma vez e depois marcado como usado. O portal cria uma nova sessão “Maya - Laptop Chrome” e a mantém logada por 14 dias, a menos que ela saia.
Mais tarde, Maya tenta entrar do celular. Reusa o e-mail da manhã e toca no mesmo link de antes. O app mostra uma mensagem clara: “Esse link já foi usado. Solicite um novo.” Ela pede outro link, se distrai. Quinze minutos depois toca e vê: “Este link expirou. Envie um novo.” Ela pede novamente, toca imediatamente e a sessão do celular é criada como “Maya - iPhone Safari”.
Na sexta, Maya ajuda uma colega em um laptop compartilhado. Ela entra, termina a tarefa e vai em “Dispositivos” e toca “Sair deste dispositivo”. Antes de sair, também remove a sessão do laptop compartilhado da conta para que não possa ser usada novamente.
Aqui estão as regras simples que o app seguiu:
- Links expiram rápido (minutos), mas sessões podem durar mais (dias)
- Cada link funciona uma vez; links usados ou expirados não podem ser reutilizados
- Cada login cria uma sessão nomeada que o usuário pode revisar
- Usuários podem sair de um dispositivo ou revogar todas as sessões quando necessário
Para construir esse fluxo no AppMaster, comece com o módulo de autenticação e ative o login por e-mail. Armazene sessões no banco (usuário, nome do dispositivo, tempo de criação, último uso). Use o módulo de mensagens para enviar o e-mail de login e um pequeno business process para validar o estado do token (não usado, não expirado), então crie ou revogue sessões. Se você quer login sem senha com magic links sem muito código, pode criar as telas e a lógica nos editores visuais e testar agora.


