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