Aula 19: Adicionando Autenticação de Usuários

Por: Nerd Toolkit Postado em: Outubro 21, 2024 Visto por: 462

1. Visão Geral da Autenticação de Usuários

A autenticação de usuários permite que o sistema valide a identidade de um usuário antes de conceder acesso a determinadas funcionalidades. Vamos implementar um processo básico de login e logout, e garantir que as páginas restritas só sejam acessadas por usuários logados.


2. Estrutura da Tabela de Usuários

Primeiramente, precisamos de uma tabela no banco de dados para armazenar os usuários. Esta tabela vai guardar informações como nome de usuário e senha (que será armazenada de forma segura com hash).

Execute o seguinte SQL no seu banco de dados MySQL para criar a tabela de usuários:

CREATE TABLE users (
   id INT(11) AUTO_INCREMENT PRIMARY KEY,
   username VARCHAR(50) NOT NULL UNIQUE,
   password VARCHAR(255) NOT NULL
);

3. Criando o Formulário de Login

No arquivo login.php, criaremos um formulário para que os usuários possam inserir seu nome de usuário e senha. Vamos estilizar o formulário usando Bootstrap.

<!DOCTYPE html>
<html lang="pt-br">
<head>
   <title>Login - Gerenciador de Tarefas</title>
   <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
   <h2 class="mt-5">Login</h2>
   <form action="login_process.php" method="POST">
       <div class="form-group">
           <label for="username">Nome de Usuário</label>
           <input type="text" class="form-control" id="username" name="username" required>
       </div>
       <div class="form-group">
           <label for="password">Senha</label>
           <input type="password" class="form-control" id="password" name="password" required>
       </div>
       <button type="submit" class="btn btn-primary">Entrar</button>
   </form>
</div>
</body>
</html>

4. Processando o Login

Agora vamos criar o arquivo login_process.php, responsável por validar as credenciais do usuário e iniciar a sessão.

<?php
session_start();
require_once 'classes/Database.php';
$database = new Database();
$db = $database->getConnection();
// Verifica se o formulário foi enviado
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $username = $_POST['username'];
   $password = $_POST['password'];
   // Consulta o banco de dados para verificar se o usuário existe
   $query = "SELECT id, username, password FROM users WHERE username = ?";
   $stmt = $db->prepare($query);
   $stmt->bind_param("s", $username);
   $stmt->execute();
   $stmt->store_result();
   
   // Verifica se o usuário existe
   if ($stmt->num_rows == 1) {
       $stmt->bind_result($id, $username, $hashed_password);
       $stmt->fetch();
       
       // Verifica a senha
       if (password_verify($password, $hashed_password)) {
           $_SESSION['user_id'] = $id;
           $_SESSION['username'] = $username;
           header("Location: tasks.php");
       } else {
           echo "Senha incorreta.";
       }
   } else {
       echo "Usuário não encontrado.";
   }
}
?>
  • O código acima verifica o nome de usuário no banco de dados e usa a função password_verify() para comparar a senha fornecida com a senha armazenada (que foi criptografada).
  • Se as credenciais forem válidas, a sessão é iniciada, e o usuário é redirecionado para a página de tarefas.

5. Criando o Registro de Usuário (Opcional)

Se o sistema também permitir o registro de novos usuários, vamos criar o arquivo register.php com um formulário e o arquivo register_process.php para processar o registro.

Formulário de Registro:

<form action="register_process.php" method="POST">
   <div class="form-group">
       <label for="username">Nome de Usuário</label>
       <input type="text" class="form-control" id="username" name="username" required>
   </div>
   <div class="form-group">
       <label for="password">Senha</label>
       <input type="password" class="form-control" id="password" name="password" required>
   </div>
   <button type="submit" class="btn btn-success">Registrar</button>
</form>

Processamento do Registro:

<?php
require_once 'classes/Database.php';
$database = new Database();
$db = $database->getConnection();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $username = $_POST['username'];
   $password = password_hash($_POST['password'], PASSWORD_BCRYPT); // Criptografa a senha
   $query = "INSERT INTO users (username, password) VALUES (?, ?)";
   $stmt = $db->prepare($query);
   $stmt->bind_param("ss", $username, $password);
   if ($stmt->execute()) {
       echo "Usuário registrado com sucesso.";
       header("Location: login.php");
   } else {
       echo "Erro ao registrar usuário.";
   }
}
?>

6. Protegendo Páginas com Sessão

Para garantir que apenas usuários logados possam acessar determinadas páginas, adicione este código no início de cada página protegida, como tasks.php:

<?php
session_start();
if (!isset($_SESSION['user_id'])) {
   header("Location: login.php");
   exit;
}
?>

Esse código verifica se a sessão do usuário foi iniciada; caso contrário, ele é redirecionado para a página de login.


7. Criando o Logout

Para encerrar a sessão, crie um arquivo logout.php:

<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;
?>

8. Melhorias Futuras

Após implementar a autenticação básica, considere adicionar funcionalidades como:

  • Recuperação de senha.
  • Autenticação com múltiplos níveis de acesso (administrador, usuário comum).

9. Próximos Passos

Agora que temos a autenticação de usuários implementada, o próximo passo é garantir que todas as funcionalidades sejam acessíveis apenas por usuários autenticados.

Tags:
#autenticação de usuários PHP  # login PHP OOP  # segurança PHP MySQL  # sistema de login PHP  # autenticação MySQL PHP  # login seguro PHP 

Notícias Relacionadas

Aula 19: Adicionando Autenticação de Usuários
  Contato
  • support@nerdtoolkit.com.br
Mapa do Site
Mostrar mapa do site
  Sobre

Feito de programadores para programadores.

Este site utiliza cookies. Ao continuar a utilizar este site, você concorda com a nossa utilização de cookies e política de privacidade.
Leia mais Concordo