2
respostas

Como fazer a parte para o usuário confirmar no email?

Quando um usuário se cadastra, devemos deixar ele com "ativo:false"? Só quando ele clicar no link de confirmação de email que fazemos "ativo:true" e liberamos para ele mexer no sistema? Ou ele se cadastra e já pode mexer no sistema? Como fazer essa parte sobre a confirmação de email e toda a lógica no código? Devemos mexer em todas as camadas como "model", "service", "controller", etc? Poderia me mostrar um exemplo sobre como fazer isso? Tem algum curso do Alura que ensine isso? Qual?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Olá, Luidi! Tudo bem?

A confirmação de e-mail é uma prática comum para garantir que o endereço de e-mail fornecido pelo usuário é válido e pertence a ele. Isso também ajuda a evitar contas falsas ou spam. Aqui está uma abordagem geral sobre como implementar isso:

  1. Cadastro do Usuário: Quando o usuário se cadastra, você pode definir o campo ativo como false no banco de dados. Isso significa que ele ainda não confirmou o e-mail e, portanto, não tem acesso total ao sistema.

  2. Envio de E-mail de Confirmação: Após o cadastro, envie um e-mail para o usuário com um link de confirmação. Esse link geralmente contém um token único que identifica o usuário.

  3. Link de Confirmação: Quando o usuário clica no link de confirmação, ele é redirecionado para uma rota no seu sistema que verifica o token. Se o token for válido, você pode então atualizar o campo ativo para true, permitindo que o usuário acesse o sistema.

  4. Camadas a serem modificadas:

    • Model: Adicione um campo ativo e possivelmente um campo para o token de confirmação.
    • Service: Implemente a lógica para gerar o token de confirmação e enviar o e-mail.
    • Controller: Crie endpoints para lidar com o cadastro e a confirmação do e-mail.

Aqui está um exemplo simplificado de como isso pode ser feito:

// Modelo de Usuário
const User = sequelize.define('User', {
  email: { type: Sequelize.STRING, unique: true },
  ativo: { type: Sequelize.BOOLEAN, defaultValue: false },
  tokenConfirmacao: Sequelize.STRING,
});

// Serviço para enviar o e-mail
async function enviarEmailConfirmacao(usuario) {
  const token = gerarToken(); // Função para gerar um token único
  usuario.tokenConfirmacao = token;
  await usuario.save();
  // Lógica para enviar o e-mail com o link de confirmação
}

// Controlador para confirmar o e-mail
app.get('/confirmar-email/:token', async (req, res) => {
  const usuario = await User.findOne({ where: { tokenConfirmacao: req.params.token } });
  if (usuario) {
    usuario.ativo = true;
    usuario.tokenConfirmacao = null;
    await usuario.save();
    res.send('E-mail confirmado com sucesso!');
  } else {
    res.send('Token inválido!');
  }
});

Quanto aos cursos da Alura, eles frequentemente atualizam e expandem seu catálogo, então vale a pena dar uma olhada no site para ver se há algum curso específico sobre autenticação e confirmação de e-mail.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Pode fazer essa parte: "gerarToken(); // Função para gerar um token único" e essa "// Lógica para enviar o e-mail com o link de confirmação" q faltou? Se souber um curso da Alura que trabalhe com essa parte me diga o nome, por favor.