Aprenda a criar um sistema de recuperação de senha com PHP e MySQL

Veja como criar um sistema seguro de recuperação de senha com PHP e MySQL, usando tokens e envio de e-mails.

Como criar um sistema de recuperação de senha usando PHP e MySQL?

A recuperação de senha é uma funcionalidade essencial em sistemas de autenticação. O método mais seguro envolve tokens de redefinição, onde o usuário recebe um link temporário para redefinir sua senha.

Criando a Estrutura da Tabela no MySQL

Criamos uma tabela para armazenar os tokens de recuperação:

CREATE TABLE recuperacao_senha (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) NOT NULL,
    token VARCHAR(255) NOT NULL,
    expiracao DATETIME NOT NULL
);

Gerando o Token e Enviando o E-mail

<?php
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
$email = $_POST['email'];

// Gerar token único
$token = bin2hex(random_bytes(50));
$expiracao = date("Y-m-d H:i:s", strtotime("+1 hour"));

// Salvar token no banco
$sql = "INSERT INTO recuperacao_senha (email, token, expiracao) VALUES (:email, :token, :expiracao)";
$stmt = $conexao->prepare($sql);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':token', $token);
$stmt->bindParam(':expiracao', $expiracao);
$stmt->execute();

// Enviar e-mail com link de recuperação
$link = "https://meusite.com/redefinir_senha.php?token=" . $token;
mail($email, "Recuperação de Senha", "Clique no link para redefinir sua senha: $link");

echo "E-mail de recuperação enviado!";
?>

Aqui:

  • Geramos um token aleatório para identificar a solicitação.
  • Salvamos o token no banco com uma data de expiração.
  • Enviamos um e-mail ao usuário com o link para redefinição.

Criando a Página de Redefinição de Senha

<?php
if (isset($_GET['token'])) {
    $conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
    $token = $_GET['token'];

    // Verificar se o token é válido e não expirou
    $sql = "SELECT email FROM recuperacao_senha WHERE token = :token AND expiracao > NOW()";
    $stmt = $conexao->prepare($sql);
    $stmt->bindParam(':token', $token);
    $stmt->execute();
    $usuario = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($usuario) {
        echo "<form method='post'>
                <input type='hidden' name='email' value='" . $usuario['email'] . "'>
                <label>Nova Senha:</label>
                <input type='password' name='nova_senha'>
                <button type='submit'>Redefinir</button>
              </form>";
    } else {
        echo "Token inválido ou expirado!";
    }
}
?>

Este código verifica o token e exibe um formulário para definir uma nova senha.

Sistemas de recuperação de senha são críticos para garantir a segurança de contas de usuários. Utilizar tokens temporários evita o armazenamento de senhas em e-mails e previne ataques de força bruta. Além disso, o uso de criptografia ao armazenar senhas melhora ainda mais a segurança.

Algumas aplicações:

  • Sistemas de login seguros
  • Recuperação de acesso a contas de e-commerce
  • Autenticação de usuários em aplicações bancárias
  • Plataformas de ensino online com gestão de contas

Dicas para quem está começando

  • Utilize tokens aleatórios para dificultar ataques.
  • Defina um tempo de expiração para tokens de recuperação.
  • Evite armazenar senhas sem criptografia.
  • Implemente um limite de tentativas para evitar abuso.
  • Use HTTPS para proteger os links de redefinição.

Contribuições de Daniel Moreira

Compartilhe este tutorial: Como criar um sistema de recuperação de senha usando PHP e MySQL?

Compartilhe este tutorial

Continue aprendendo:

Como usar índices no MySQL para melhorar a performance das consultas no PHP?

Veja como os índices no MySQL podem acelerar as consultas e melhorar a eficiência do banco de dados ao utilizar PHP.

Tutorial anterior

Como gerar relatórios em PDF a partir de dados do MySQL com PHP?

Veja como transformar dados do MySQL em relatórios PDF usando PHP, ideal para geração de documentos profissionais.

Próximo tutorial