Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RegEx para validar e-mail no campo de recuperação de senha #942

Closed
bertonni opened this issue Nov 24, 2022 · 6 comments
Closed

RegEx para validar e-mail no campo de recuperação de senha #942

bertonni opened this issue Nov 24, 2022 · 6 comments

Comments

@bertonni
Copy link

Aparentemente não há um tratamento do input de recuperação de senha. Testei com um texto simples, sem @ e fui encaminhado para a página que avisa que um e-mail foi enviado.

Parabéns pelo projeto!

@Rafatcb
Copy link
Collaborator

Rafatcb commented Nov 24, 2022

Não é recomendado usar RegEx para validação de e-mails porque é algo extremamente complexo e passível de erros, como mencionado aqui: How can I validate an email address using a regular expression?

Dito isso, acho que não temos necessidade de validar o e-mail porque já existe um e-mail de confirmação para verificar se este realmente existe. O que acho legal é ter uma lista de possível erros de digitação para auxiliar o usuário no cadastro/login, que já existe hoje:

// TODO: move to a separate file to make it reusable
// or to a separate module to share it with the open source community.
function suggestEmail(typedEmail) {
const userName = typedEmail.split('@')[0];
const typedDomain = typedEmail.split('@')[1];
const domains = [
['gmail', 'gmail.com'],
['gmail.', 'gmail.com'],
['gmail.c', 'gmail.com'],
['gmail.co', 'gmail.com'],
['gmail.coom', 'gmail.com'],
['gmail.comm', 'gmail.com'],
['gmail.com.', 'gmail.com'],
['gmail.com.b', 'gmail.com'],
['gmail.com.br', 'gmail.com'],
['mail.com', 'gmail.com'],
['dmail.com', 'gmail.com'],
['gmad.com,', 'gmail.com'],
['gimail.com', 'gmail.com'],
['mgil.com', 'gmail.com'],
['gil.com', 'gmail.com'],
['gmaul.com', 'gmail.com'],
['gnail.com', 'gmail.com'],
['gail.com', 'gmail.com'],
['gamail.com', 'gmail.com'],
['gamial.com', 'gmail.com'],
['gamil.com', 'gmail.com'],
['gmail.cpm', 'gmail.com'],
['ggmail.com', 'gmail.com'],
['gmai.com', 'gmail.com'],
['gmaiil.com', 'gmail.com'],
['gmail.cm', 'gmail.com'],
['gmaild.com', 'gmail.com'],
['gmaile.com', 'gmail.com'],
['gmaill.com', 'gmail.com'],
['gmain.com', 'gmail.com'],
['gmaio.com', 'gmail.com'],
['gmail.cok', 'gmail.com'],
['gmal.com', 'gmail.com'],
['gmali.com', 'gmail.com'],
['gmil.co', 'gmail.com'],
['gmanil.com', 'gmail.com'],
['gmaol.com', 'gmail.com'],
['gmaqil.com', 'gmail.com'],
['gmeil.com', 'gmail.com'],
['gmial.com', 'gmail.com'],
['gmil.com', 'gmail.com'],
['gmmail.com', 'gmail.com'],
['gmsil.com', 'gmail.com'],
['hmail.com', 'gmail.com'],
['ygmail.com', 'gmail.com'],
['gmiail.com', 'gmail.com'],
['gemail.com', 'gmail.com'],
['gmail.con', 'gmail.com'],
['gail.com.ar', 'gmail.com'],
['gamail.com.ar', 'gmail.com'],
['gamial.com.ar', 'gmail.com'],
['gamil.com.ar', 'gmail.com'],
['ggmail.com.ar', 'gmail.com'],
['gmai.com.ar', 'gmail.com'],
['gmaiil.com.ar', 'gmail.com'],
['gmail.cm.br', 'gmail.com'],
['gmail.cm.ar', 'gmail.com'],
['gmaild.com.ar', 'gmail.com'],
['gmaile.com.ar', 'gmail.com'],
['gmaill.com.ar', 'gmail.com'],
['gmain.com.ar', 'gmail.com'],
['gmaio.com.ar', 'gmail.com'],
['gmal.com.ar', 'gmail.com'],
['gmali.com.ar', 'gmail.com'],
['gmanil.com.ar', 'gmail.com'],
['gmaol.com.ar', 'gmail.com'],
['gmailee.com', 'gmail.com'],
['gmaqil.com.ar', 'gmail.com'],
['gmeil.com.ar', 'gmail.com'],
['gmial.com.ar', 'gmail.com'],
['gmil.com.ar', 'gmail.com'],
['gmmail.com.ar', 'gmail.com'],
['gmsil.com.ar', 'gmail.com'],
['hmail.com.ar', 'gmail.com'],
['ygmail.com.ar', 'gmail.com'],
['gmail.cim', 'gmail.com'],
['gmail.com.ar', 'gmail.com'],
['gmailc.om', 'gmail.com'],
['gmnail.com', 'gmail.com'],
['gmakl.com', 'gmail.com'],
['gmol.com', 'gmail.com'],
['gmail.cin', 'gmail.com'],
['gmail.cim', 'gmail.com'],
['gmaiq.com', 'gmail.com'],
['gmailc.mo', 'gmail.com'],
['hitmail.com', 'hotmail.com'],
['htmail.com', 'hotmail.com'],
['hotmail.coom', 'hotmail.com'],
['hotmail.comm', 'hotmail.com'],
['hotnail.ckm', 'hotmail.com'],
['hatmail.com', 'hotmail.com'],
['hotomail.com', 'hotmail.com'],
['otmail.com', 'hotmail.com'],
['hoitmail.com', 'hotmail.com'],
['hoimail.com', 'hotmail.com'],
['hotnail.com', 'hotmail.com'],
['homail.com', 'hotmail.com'],
['homtail.com', 'hotmail.com'],
['homtmail.com', 'hotmail.com'],
['hormail.com', 'hotmail.com'],
['hotail.com', 'hotmail.com'],
['hotamail.com', 'hotmail.com'],
['hotamil.com', 'hotmail.com'],
['hotmaail.com', 'hotmail.com'],
['hotmai.com', 'hotmail.com'],
['hotmaiil.com', 'hotmail.com'],
['hotmail.con', 'hotmail.com'],
['hotmail.co', 'hotmail.com'],
['hotmail.cm', 'hotmail.com'],
['hotmaill.com', 'hotmail.com'],
['hotmail.net', 'hotmail.com'],
['hotmail.ocm', 'hotmail.com'],
['hotmailt.com', 'hotmail.com'],
['hotmal.com', 'hotmail.com'],
['hotmial.com', 'hotmail.com'],
['hotmiail.com', 'hotmail.com'],
['hotmil.co', 'hotmail.com'],
['hotmil.com', 'hotmail.com'],
['hotmmail.com', 'hotmail.com'],
['hotmqil.com', 'hotmail.com'],
['hotmsil.com', 'hotmail.com'],
['htoamil.com', 'hotmail.com'],
['htomail.com', 'hotmail.com'],
['hoymail.com', 'hotmail.com'],
['hootmail.com', 'hotmail.com'],
['hotmi.com', 'hotmail.com'],
['hotmail.com.com', 'hotmail.com'],
['hotma.com', 'hotmail.com'],
['hotmali.com', 'hotmail.com'],
['hotrmail.com', 'hotmail.com'],
['hotmail.cim', 'hotmail.com'],
['hotmail.cin', 'hotmail.com'],
['bol.com', 'bol.com.br'],
['yahoo.coom', 'yahoo.com'],
['yahoo.comm', 'yahoo.com'],
['yahoo.con', 'yahoo.com'],
['yaho.com', 'yahoo.com'],
['protonmil.com', 'protonmail.com'],
['outlok.com', 'outlook.com'],
['outlook.con', 'outlook.com'],
['outloo.com', 'outlook.com'],
['outlook.cm', 'outlook.com'],
['outlook.comm', 'outlook.com'],
['outlook.co', 'outlook.com'],
['prontomail.com', 'protonmail.com'],
['zipmail.combr', 'zipmail.com.br'],
];

Inclusive, isso já está duplicado no projeto:

// TODO: move to a separate file to make it reusable
// or to a separate module to share it with the open source community.
function suggestEmail(typedEmail) {
const userName = typedEmail.split('@')[0];
const typedDomain = typedEmail.split('@')[1];
const domains = [
['gmail', 'gmail.com'],
['gmail.', 'gmail.com'],
['gmail.c', 'gmail.com'],
['gmail.co', 'gmail.com'],
['gmail.coom', 'gmail.com'],
['gmail.comm', 'gmail.com'],
['gmail.com.', 'gmail.com'],
['gmail.com.b', 'gmail.com'],
['gmail.com.br', 'gmail.com'],
['mail.com', 'gmail.com'],
['dmail.com', 'gmail.com'],
['gmad.com,', 'gmail.com'],
['gimail.com', 'gmail.com'],
['mgil.com', 'gmail.com'],
['gil.com', 'gmail.com'],
['gmaul.com', 'gmail.com'],
['gnail.com', 'gmail.com'],
['gail.com', 'gmail.com'],
['gamail.com', 'gmail.com'],
['gamial.com', 'gmail.com'],
['gamil.com', 'gmail.com'],
['gmail.cpm', 'gmail.com'],
['ggmail.com', 'gmail.com'],
['gmai.com', 'gmail.com'],
['gmaiil.com', 'gmail.com'],
['gmail.cm', 'gmail.com'],
['gmaild.com', 'gmail.com'],
['gmaile.com', 'gmail.com'],
['gmaill.com', 'gmail.com'],
['gmain.com', 'gmail.com'],
['gmaio.com', 'gmail.com'],
['gmail.cok', 'gmail.com'],
['gmal.com', 'gmail.com'],
['gmali.com', 'gmail.com'],
['gmil.co', 'gmail.com'],
['gmanil.com', 'gmail.com'],
['gmaol.com', 'gmail.com'],
['gmaqil.com', 'gmail.com'],
['gmeil.com', 'gmail.com'],
['gmial.com', 'gmail.com'],
['gmil.com', 'gmail.com'],
['gmmail.com', 'gmail.com'],
['gmsil.com', 'gmail.com'],
['hmail.com', 'gmail.com'],
['ygmail.com', 'gmail.com'],
['gmiail.com', 'gmail.com'],
['gemail.com', 'gmail.com'],
['gmail.con', 'gmail.com'],
['gail.com.ar', 'gmail.com'],
['gamail.com.ar', 'gmail.com'],
['gamial.com.ar', 'gmail.com'],
['gamil.com.ar', 'gmail.com'],
['ggmail.com.ar', 'gmail.com'],
['gmai.com.ar', 'gmail.com'],
['gmaiil.com.ar', 'gmail.com'],
['gmail.cm.br', 'gmail.com'],
['gmail.cm.ar', 'gmail.com'],
['gmaild.com.ar', 'gmail.com'],
['gmaile.com.ar', 'gmail.com'],
['gmaill.com.ar', 'gmail.com'],
['gmain.com.ar', 'gmail.com'],
['gmaio.com.ar', 'gmail.com'],
['gmal.com.ar', 'gmail.com'],
['gmali.com.ar', 'gmail.com'],
['gmanil.com.ar', 'gmail.com'],
['gmaol.com.ar', 'gmail.com'],
['gmailee.com', 'gmail.com'],
['gmaqil.com.ar', 'gmail.com'],
['gmeil.com.ar', 'gmail.com'],
['gmial.com.ar', 'gmail.com'],
['gmil.com.ar', 'gmail.com'],
['gmmail.com.ar', 'gmail.com'],
['gmsil.com.ar', 'gmail.com'],
['hmail.com.ar', 'gmail.com'],
['ygmail.com.ar', 'gmail.com'],
['gmail.cim', 'gmail.com'],
['gmail.com.ar', 'gmail.com'],
['gmailc.om', 'gmail.com'],
['gmnail.com', 'gmail.com'],
['gmakl.com', 'gmail.com'],
['gmol.com', 'gmail.com'],
['gmail.cin', 'gmail.com'],
['gmail.cim', 'gmail.com'],
['gmaiq.com', 'gmail.com'],
['gmailc.mo', 'gmail.com'],
['hitmail.com', 'hotmail.com'],
['htmail.com', 'hotmail.com'],
['hotmail.coom', 'hotmail.com'],
['hotmail.comm', 'hotmail.com'],
['hotnail.ckm', 'hotmail.com'],
['hatmail.com', 'hotmail.com'],
['hotomail.com', 'hotmail.com'],
['otmail.com', 'hotmail.com'],
['hoitmail.com', 'hotmail.com'],
['hoimail.com', 'hotmail.com'],
['hotnail.com', 'hotmail.com'],
['homail.com', 'hotmail.com'],
['homtail.com', 'hotmail.com'],
['homtmail.com', 'hotmail.com'],
['hormail.com', 'hotmail.com'],
['hotail.com', 'hotmail.com'],
['hotamail.com', 'hotmail.com'],
['hotamil.com', 'hotmail.com'],
['hotmaail.com', 'hotmail.com'],
['hotmai.com', 'hotmail.com'],
['hotmaiil.com', 'hotmail.com'],
['hotmail.con', 'hotmail.com'],
['hotmail.co', 'hotmail.com'],
['hotmail.cm', 'hotmail.com'],
['hotmaill.com', 'hotmail.com'],
['hotmail.net', 'hotmail.com'],
['hotmail.ocm', 'hotmail.com'],
['hotmailt.com', 'hotmail.com'],
['hotmal.com', 'hotmail.com'],
['hotmial.com', 'hotmail.com'],
['hotmiail.com', 'hotmail.com'],
['hotmil.co', 'hotmail.com'],
['hotmil.com', 'hotmail.com'],
['hotmmail.com', 'hotmail.com'],
['hotmqil.com', 'hotmail.com'],
['hotmsil.com', 'hotmail.com'],
['htoamil.com', 'hotmail.com'],
['htomail.com', 'hotmail.com'],
['hoymail.com', 'hotmail.com'],
['hootmail.com', 'hotmail.com'],
['hotmi.com', 'hotmail.com'],
['hotmail.com.com', 'hotmail.com'],
['hotma.com', 'hotmail.com'],
['hotmali.com', 'hotmail.com'],
['hotrmail.com', 'hotmail.com'],
['hotmail.cim', 'hotmail.com'],
['hotmail.cin', 'hotmail.com'],
['bol.com', 'bol.com.br'],
['yahoo.coom', 'yahoo.com'],
['yahoo.comm', 'yahoo.com'],
['yahoo.con', 'yahoo.com'],
['yaho.com', 'yahoo.com'],
['protonmil.com', 'protonmail.com'],
['outlok.com', 'outlook.com'],
['outlook.con', 'outlook.com'],
['outloo.com', 'outlook.com'],
['outlook.cm', 'outlook.com'],
['outlook.comm', 'outlook.com'],
['outlook.co', 'outlook.com'],
['prontomail.com', 'protonmail.com'],
['zipmail.combr', 'zipmail.com.br'],
];

Então acho que podemos aproveitar para realizar esse TODO 👍. Pode ser feito um hook para essa sugestão, e acho interessante mudar o nome da função também, porque lendo apenas ele, não consegui entender o que a função fazia.

PS: A alternativa de ser um módulo open source também é interessante.

@bertonni
Copy link
Author

Entendi, mas essa verificação ocorre na hora de redefinir a senha também? Porque, caso haja um erro de digitação nesse campo, o usuário vai receber uma mensagem de que o e-mail foi enviado, sendo que este e-mail nunca vai chegar, certo? Caso não seja nenhuma das opções listadas.

@filipedeschamps
Copy link
Owner

filipedeschamps commented Nov 24, 2022

Interessante, na verdade existe uma validação pelo Joi, que começa aqui:

Depois vem para cá:

Nesse caso é preciso entender se o Joi de fato está validando um @ por conta da dinâmica desse valor que o @Rafatcb apontou.

@Rafatcb
Copy link
Collaborator

Rafatcb commented Nov 24, 2022

Entendi, mas essa verificação ocorre na hora de redefinir a senha também? Porque, caso haja um erro de digitação nesse campo, o usuário vai receber uma mensagem de que o e-mail foi enviado, sendo que este e-mail nunca vai chegar, certo? Caso não seja nenhuma das opções listadas.

Acabei de realizar o teste e, caso você informe um e-mail errado para recuperar a senha, aparece o erro:

O "email" informado não foi encontrado no sistema.

@bertonni
Copy link
Author

Massa. Muito obrigado pelas respostas. Eu havia sugerido uma RegEx porque o campo aceita um texto sem @, só questão de UX mesmo =)

Parabéns mais uma vez pelo projeto. Tá massa

@aprendendofelipe
Copy link
Collaborator

Fechando a issue, pois entendi que o assunto foi resolvido. 💪

Qualquer coisa é só reabrir 🤝

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants