Como fazer login e autenticação de usuário usando PHP e MySQL?
A autenticação de usuários é uma funcionalidade essencial para qualquer sistema seguro. Neste guia, veremos como criar um sistema de login com PHP e MySQL, garantindo a segurança dos dados do usuário através de hashing de senhas e sessões.
Criando a Tabela no MySQL
Antes de iniciar o desenvolvimento em PHP, criamos a tabela para armazenar os usuários:
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
senha VARCHAR(255) NOT NULL,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Essa tabela armazenará o ID, nome, e-mail e senha dos usuários.
Criando o Cadastro de Usuário em PHP
Ao cadastrar um usuário, devemos criptografar a senha antes de armazená-la:
<?php
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
$conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Capturando os dados do formulário
$nome = $_POST['nome'];
$email = $_POST['email'];
$senha = password_hash($_POST['senha'], PASSWORD_DEFAULT);
$sql = "INSERT INTO usuarios (nome, email, senha) VALUES (:nome, :email, :senha)";
$stmt = $conexao->prepare($sql);
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':senha', $senha);
$stmt->execute();
echo "Usuário cadastrado com sucesso!";
?>
Aqui, utilizamos password_hash()
para criptografar a senha antes de salvá-la no banco de dados.
Criando o Sistema de Login
No login, utilizamos password_verify()
para comparar a senha digitada com a armazenada:
<?php
session_start();
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
$email = $_POST['email'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM usuarios WHERE email = :email";
$stmt = $conexao->prepare($sql);
$stmt->bindParam(':email', $email);
$stmt->execute();
$usuario = $stmt->fetch(PDO::FETCH_ASSOC);
if ($usuario && password_verify($senha, $usuario['senha'])) {
$_SESSION['usuario_id'] = $usuario['id'];
$_SESSION['usuario_nome'] = $usuario['nome'];
echo "Login bem-sucedido!";
} else {
echo "E-mail ou senha incorretos.";
}
?>
Com session_start()
, armazenamos informações do usuário autenticado na sessão.
Como garantir a segurança em sistemas de login no PHP?
Criar um sistema de login seguro no PHP é fundamental para garantir a proteção dos dados dos usuários. O uso de hashing de senhas com password_hash()
impede que senhas sejam armazenadas de forma vulnerável. Além disso, ao usar session_start()
, podemos manter a autenticação do usuário entre páginas, garantindo uma experiência mais fluida e segura.
Algumas aplicações:
- Implementação de autenticação de usuários em sites
- Controle de acesso para áreas restritas
- Gerenciamento de sessões para usuários autenticados
- Proteção contra ataques de força bruta com hashing de senhas
Dicas para quem está começando
- Sempre use
password_hash()
para armazenar senhas de forma segura. - Utilize
password_verify()
ao autenticar usuários. - Armazene a sessão do usuário com
session_start()
após o login. - Nunca armazene senhas em texto puro no banco de dados.
- Implemente um sistema de logout para destruir a sessão quando necessário.
Contribuições de Daniel Moreira