db = $db; } public function register(string $username, string $password): bool { $passwordHash = password_hash($password, PASSWORD_DEFAULT); $sql = "INSERT INTO users (username, passwordHash) VALUES (:username, :passwordHash)"; $this->db->prepare($sql); return $this->db->execute([ ':username' => $username, ':passwordHash' => $passwordHash, ]); } public function login(string $username, string $password): ?User { $sql = "SELECT * FROM users WHERE username = :username"; $this->db->prepare($sql); $this->db->execute([':username' => $username]); $result = $this->db->fetch(); if ($result && (new User($result['id'], $result['username'], $result['passwordHash']))->verifyPassword($password)) { // Start or regenerate the session session_regenerate_id(); $_SESSION['user_id'] = $result['id']; return new User($result['id'], $result['username'], $result['passwordHash']); } return null; } // Additional methods as needed, e.g., for password change, user details update, etc. }