verificação de E-mail PHP

Resumo: neste tutorial, você aprenderá como verificar o endereço de E-mail da nova conta com segurança usando um link de ativação.

Introdução à verificação de E-mail PHP para novas contas

em tutoriais anteriores, você aprendeu a criar um formulário de registro que permite aos usuários se registrar para contas. E você também aprendeu a criar um formulário de login que permitirá aos usuários usar o nome de usuário e a senha para fazer login.

quando os usuários se registram para novas contas, eles inserem seus endereços de E-mail. No entanto, os usuários podem inserir qualquer endereço de E-mail porque o sistema não verifica o e-mail.

para verificar os endereços de E-mail dos usuários, você pode enviar um e-mail de verificação para esses endereços de E-mail e solicitar que os usuários abram seus e-mails e cliquem em um link de ativação.

para fazer isso, você segue as seguintes etapas quando os usuários registram contas:

  • gere um código de ativação exclusivo e defina um tempo de expiração, por exemplo, um dia.
  • Salve o registro do usuário no banco de dados e marque o status do usuário como inativo. Além disso, salve o hash do código de ativação & tempo de expiração.
  • envie um e-mail com o link de ativação para o endereço de E-mail do Usuário. O link de ativação conterá o endereço de E-mail e o código de ativação, por exemplo., https://app.com/activate.php?email=email&activation_code=abcd
  • informe o Usuário para ativar a conta por e-mail.

Hashing o código de ativação garante que apenas o usuário que possui o endereço de E-mail pode ativar a conta, não qualquer outra pessoa, mesmo o administrador, que pode acessar o banco de dados.

se os usuários não ativaram a conta, eles não poderão fazer login.

quando os usuários clicam no link de ativação no e-mail, você precisa executar as seguintes etapas:

  • higienizar e validar o código de E-mail e ativação.
  • Encontre o usuário inativo com o endereço de E-mail. Se não houver registro de usuário, redirecione para o formulário de registro.
  • se um registro de usuário existir e o código de ativação expirar, exclua o registro de usuário do banco de dados e redirecione para o formulário de registro.
  • caso contrário, combine o código de ativação com o hash do código de ativação armazenado no banco de dados. Se eles corresponderem, marque o registro do usuário como ativo e redirecione para a página de login.

Recriar a tabela de usuários

Primeiro, solte o users tabela de auth banco de dados:

Code language: SQL (Structured Query Language) (sql)

em Segundo lugar, criar o users tabela com as novas colunas active, activation_code, activation_at, activation_expiry:

Code language: SQL (Structured Query Language) (sql)

A seguinte explica o significado das colunas novas.

o valor da coluna active é padrão para 0. Isso significa que os usuários que se registram para contas, mas não verificaram seus endereços de E-mail, ficarão inativos por padrão.

a coluna activation_code armazenará o hash do código de ativação. Seu comprimento deve ser suficiente para armazenar a string retornada pela função password_hash().

é importante notar que o hash será truncado se a coluna activation_code não tiver um tamanho longo o suficiente. Isso fará com que a função password_verify() não corresponda ao código de ativação com o hash.

a coluna activation_expiry armazena o tempo de expiração para usar o código de ativação antes da expiração. O tempo de expiração garante que o código de ativação não possa ser usado se o endereço de E-mail for comprometido após o tempo de expiração.

a coluna activated_at armazena a data e a hora em que os usuários ativam suas contas.

estrutura do projeto

vamos revisar a estrutura atual do projeto antes de adicionar as funções de verificação de E-mail:

Code language: PHP (php)

modifique as funções no auth.arquivo php

o seguinte adiciona o código de ativação e o parâmetro de expiração à função register_user(). Por padrão, o tempo de expiração é de um dia ( 1 * 24 * 60 * 60).

Code language: PHP (php)

a função register_user() usa a função password_hash() para hash o código de ativação.

O find_user_by_username() função inclui o active coluna no resultado:

Code language: PHP (php)

O seguinte define uma nova função is_user_active() que retorna true se o usuário está ativo:

Code language: PHP (php)

O login() função deve permitir somente usuários ativos para entrar:

Code language: PHP (php)

Definir funções que lidam com a verificação de e-mail

Nós vamos adicionar as funções que lidam com a verificação de e-mail para auth.php arquivo.

primeiro, crie um novo arquivo app.php na pasta config e defina as seguintes constantes:

Code language: PHP (php)

usaremos essas constantes para enviar e-mails de ativação aos usuários. Para usar essas constantes, você precisa incluir o app.php arquivo no bootstrap.php arquivo:

Code language: PHP (php)

Segundo, definir uma função que gera um único e aleatório código de ativação:

Code language: PHP (php)

Terceiro, definir uma função que envia uma verificação de e-mail com um link de ativação.

Code language: PHP (php)

suponha que o URL do aplicativo seja http://localhost/auth, o URL de ativação será semelhante a este:

Code language: PHP (php)

a função send_activation_email() usa a função mail() embutida para enviar e-mails.

em quarto lugar, defina uma função que exclui um usuário por id e status. Por padrão, ele exclui um usuário inativo por id.

Code language: PHP (php)

quinto, defina uma função que encontre um usuário não verificado por um e-mail e código de ativação. Se o código de ativação expirar, a função também excluirá o registro do usuário chamando a função delete_user_by_id().

Code language: PHP (php)

sexto, defina uma nova função activate_user() que ativa um usuário por um id:

Code language: PHP (php)

modificar o registo.página php

o src/register.php precisa incorporar a lógica para lidar com a lógica de verificação de E-mail.

Code language: PHP (php)

como funciona.

Primeiro, gerar um código de ativação:

Code language: PHP (php)

Segundo, o registo do utilizador com o código de ativação:

Code language: PHP (php)

Terceiro, envie um e-mail para o endereço de email do usuário chamando o send_activation_email() função:

Code language: PHP (php)

Finalmente, redirecionar o usuário para a página de login e mostrar um flash mensagem que solicita que o usuário ativar a conta através de e-mail:

Code language: PHP (php)

Crie o activar.página php

para permitir que os usuários ativem suas contas após o registro, você pode criar uma nova página activate.php na pasta public e usar a seguinte página:

Code language: PHP (php)

como ativar.php funciona.

primeiro, Higienize e valide o código de E-mail e ativação:

Code language: PHP (php)

em segundo lugar, encontre o Usuário não verificado com base no código de E-mail e verificação se não houver erros de validação. O find_unverified_user() também excluirá o Usuário não verificado se o tempo de expiração expirar.

Code language: PHP (php)

terceiro, ative o Usuário e redirecione para o login.página php:

Code language: PHP (php)

Finalmente, redirecionar para a registration.php se houver um erro:

Code language: PHP (php)

neste tutorial, você aprendeu como implementar a verificação de e-mail para as contas de usuário em PHP.

Leave a Reply