Clique aqui e veja todas as aulas
1. Criando a Tabela users
Vamos iniciar criando a tabela users no banco de dados MySQL. Esta tabela vai armazenar o nome de usuário e a senha de cada usuário registrado no sistema. A senha será armazenada de forma segura, usando o hash para proteção.
Execute o seguinte comando SQL no seu banco de dados:
CREATE TABLE users (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);- id: Identificador único para cada usuário.
- username: Nome de usuário, único para cada conta.
- password: Senha do usuário, armazenada de forma criptografada.
2. Criando a Classe User
Agora que temos a tabela de usuários, vamos criar a classe User em PHP. Esta classe será responsável pelas operações de criação de usuário, login e validação de dados.
Estrutura da Classe User
No arquivo classes/User.php, crie a classe da seguinte forma:
<?php
class User {
private $db;
public function __construct($db) {
$this->db = $db;
}
// Método para registrar um novo usuário
public function register($username, $password) {
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
$query = "INSERT INTO users (username, password) VALUES (?, ?)";
$stmt = $this->db->prepare($query);
$stmt->bind_param("ss", $username, $hashed_password);
return $stmt->execute();
}
// Método para fazer login de um usuário
public function login($username, $password) {
$query = "SELECT id, username, password FROM users WHERE username = ?";
$stmt = $this->db->prepare($query);
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == 1) {
$stmt->bind_result($id, $username, $hashed_password);
$stmt->fetch();
if (password_verify($password, $hashed_password)) {
// Inicia sessão
$_SESSION['user_id'] = $id;
$_SESSION['username'] = $username;
return true;
}
}
return false;
}
// Método para verificar se o usuário está logado
public static function isLoggedIn() {
return isset($_SESSION['user_id']);
}
// Método para encerrar a sessão (logout)
public static function logout() {
session_unset();
session_destroy();
}
}
?>Explicação dos Métodos:
- register(): Este método cria um novo usuário no banco de dados, criptografando a senha antes de armazená-la.
- login(): Este método verifica o nome de usuário e a senha fornecidos. Se os dados estiverem corretos, a sessão do usuário é iniciada.
- isLoggedIn(): Verifica se o usuário está logado.
- logout(): Encerra a sessão do usuário, fazendo o logout.
3. Usando a Classe User
Agora que temos a classe User, podemos integrá-la ao nosso sistema de autenticação.
Registro de Usuário:
Para registrar um novo usuário, vamos usar o método register() da classe User. Por exemplo, em um arquivo register_process.php:
<?php
require_once 'classes/Database.php';
require_once 'classes/User.php';
$database = new Database();
$db = $database->getConnection();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user = new User($db);
$username = $_POST['username'];
$password = $_POST['password'];
if ($user->register($username, $password)) {
echo "Usuário registrado com sucesso!";
header("Location: login.php");
} else {
echo "Erro ao registrar usuário.";
}
}
?>Login de Usuário:
Para o login, use o método login() da classe User, como no arquivo login_process.php:
<?php
require_once 'classes/Database.php';
require_once 'classes/User.php';
session_start();
$database = new Database();
$db = $database->getConnection();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user = new User($db);
$username = $_POST['username'];
$password = $_POST['password'];
if ($user->login($username, $password)) {
header("Location: tasks.php");
} else {
echo "Nome de usuário ou senha incorretos.";
}
}
?>4. Exercício Prático
Como exercício prático:
- Teste o sistema de registro e login de usuários que acabamos de implementar.
- Experimente adicionar validações adicionais, como verificação de campos vazios ou limite mínimo de caracteres para a senha.
5. Próximos Passos
Agora que temos a tabela de usuários e a classe User implementada, o próximo passo será melhorar a interface e expandir as funcionalidades de autenticação, como recuperação de senha.
