Para gerenciar o conteúdo do blog é necessário fazer login, então precisamos implementar um sistema de autenticação e proteger somente a área administrativa da aplicação. No CodeIgniter 4, podemos criar uma área logada usando sessões e filtros de autenticação.
Criando a Tabela de Usuários
O primeiro passo é criar uma tabela para armazenar os dados dos usuários. Podemos fazer isso utilizando migrations. Execute o seguinte comando:
php spark migrate:create CreateUsersTable
Isso criará um arquivo dentro de app/Database/Migrations/
. Edite o arquivo para definir a estrutura da tabela:
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class CreateUsersTable extends Migration
{
public function up()
{
$this->forge->addField([
'id' => ['type' => 'INT', 'constraint' => 11, 'auto_increment' => true, 'unsigned' => true],
'nome' => ['type' => 'VARCHAR', 'constraint' => 100],
'email' => ['type' => 'VARCHAR', 'constraint' => 150, 'unique' => true],
'senha' => ['type' => 'VARCHAR', 'constraint' => 255],
'created_at'=> ['type' => 'DATETIME', 'null' => true],
'updated_at'=> ['type' => 'DATETIME', 'null' => true],
]);
$this->forge->addPrimaryKey('id');
$this->forge->createTable('usuarios');
}
public function down()
{
$this->forge->dropTable('usuarios');
}
}
Para executar a migração e criar a tabela no banco de dados, use:
php spark migrate
Criando o Model de Usuários
No diretório app/Models/
, crie o arquivo UsuarioModel.php
:
namespace App\Models;
use CodeIgniter\Model;
class UsuarioModel extends Model
{
protected $table = 'usuarios';
protected $primaryKey = 'id';
protected $allowedFields = ['nome', 'email', 'senha'];
protected $useTimestamps = true;
}
Criando o Controller de Autenticação
Agora precisamos criar um controlador para lidar com o login e logout dos usuários. No diretório app/Controllers/
, crie o arquivo AuthController.php
:
namespace App\Controllers;
use App\Models\UsuarioModel;
use CodeIgniter\Controller;
class AuthController extends Controller
{
public function login()
{
return view('auth/login');
}
public function autenticar()
{
$session = session();
$model = new UsuarioModel();
$email = $this->request->getPost('email');
$senha = $this->request->getPost('senha');
$usuario = $model->where('email', $email)->first();
if ($usuario && password_verify($senha, $usuario['senha'])) {
$session->set('usuario_logado', $usuario['id']);
return redirect()->to('/admin/dashboard');
} else {
return redirect()->to('/login')->with('erro', 'Credenciais inválidas.');
}
}
public function logout()
{
session()->destroy();
return redirect()->to('/login');
}
}
Criando a View de Login
No diretório app/Views/auth/
, crie o arquivo login.php
:
<h1>Login</h1>
<?php if(session()->getFlashdata('erro')): ?>
<p style="color: red;"><?= session()->getFlashdata('erro') ?></p>
<?php endif; ?>
<form action="<?= site_url('autenticar') ?>" method="post">
<label>Email:</label>
<input type="email" name="email" required><br>
<label>Senha:</label>
<input type="password" name="senha" required><br>
<button type="submit">Entrar</button>
</form>
Protegendo a Área Administrativa com um Filtro
Para garantir que apenas usuários logados acessem a área administrativa, criaremos um filtro de autenticação. No diretório app/Filters/
, crie o arquivo AuthFilter.php
:
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
if (!session()->get('usuario_logado')) {
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// Nenhuma ação necessária após a requisição
}
}
Agora, registramos esse filtro no arquivo app/Config/Filters.php
:
public $filters = [
'auth' => ['before' => ['admin/*']],
];
Isso faz com que todas as rotas que começam com /admin
exijam autenticação.
Definindo as Rotas
Agora, registramos as rotas para login, logout e a área administrativa no arquivo app/Config/Routes.php
:
$routes->get('login', 'AuthController::login');
$routes->post('autenticar', 'AuthController::autenticar');
$routes->get('logout', 'AuthController::logout');
$routes->get('admin/dashboard', 'AdminController::index', ['filter' => 'auth']);
Conclusão
Agora a área administrativa do site está protegida, garantindo que apenas usuários autenticados possam gerenciar o conteúdo. No próximo post, abordaremos a criação do sistema de gerenciamento de posts dentro da área logada.
Se você ou sua empresa precisa de suporte para desenvolvimento com CodeIgniter 4, a Saldaris Consultoria pode ajudar. Entre em contato pelo formulário no final da página para saber mais sobre nossos serviços.