Neste artigo, você aprenderá como implementar autenticação e dar mais segurança ao seu projeto, configurando Middlewares para as requisições HTTP que serão feitas.

Olá Pessoal! Estou de volta para continuar nossos estudos sobre o Laravel. No último artigo eu trouxe os form validations, para validarmos todo tipo de entrada em formulários para os usuários. Agora, vamos dar um pulo na segurança do projeto, configurando Middlewares para as requisições que serão feitas.

No caso utilizarei o Middleware de autenticação do Laravel para verificar se um usuários do sistema está autenticado.

O que são os Middlewares no Laravel?

O Middleware é apenas um mecanismo de filtragem de requisição HTTP. Ou seja, ele permite ou barra determinados fluxos de requisição que entram na sua aplicação, baseado em regras definidas.

Dando um exemplo prático, o Middleware de autenticação do Laravel verifica se um usuário está autenticado no sistema. Caso não esteja, o sistema barra a requisição antes mesmo de chegar ao Controller.

O Middleware de autenticação do Laravel é considerado de rota, mas, ainda existem outros 2 tipos: os Middlewares globais e os grupos de Middlewares, que falarei a seguir.

Middlewares Globais

Como o nome já implica, o Middleware global intermediará toda requisição HTTP. Assim, só é recomendado utilizar, caso todo o seu sistema necessite de autenticação para funcionar. Mas, como a nossa página de login, signup e etc não serão autenticadas, não utilizaremos este método.

Agora, caso você precise fazer alguma regra para ser aplicada globalmente, basta adicionar Middleware criado na propriedade $middleware no arquivo app/Http/Kernel.php

class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * These *  middleware are run during every request to your application. * * @var  *  array  */  protected $middleware = [    \App\Http\Middleware\CheckForMaintenanceMode::class,   \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,   \App\Http\Middleware\TrimStrings::class,       \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class   \App\Http\Middleware\TrustProxies::class,   \App\Http\Middleware\SuaClasseMiddleware::class, ]; … 

Grupos de Middlewares

Os grupos de Middlewares servem para você conseguir colocar várias regras de Middlewares diferentes sendo utilizadas de uma vez para toda requisição dentro do grupo especificado. 

Por padrão, toda requisição de browser estará inclusa nas requisições web, ou seja, todas as rotas que estão no arquivo web.php, passarão pela validação do grupo web que se encontra no Kernel.php. Por este motivo, também não configurarei a classe Authenticate aqui.

Middleware de rotas

O Middleware de rota é a forma mais específica que você pode criar. Ele é aplicado no Kernel.php com um label dentro da propriedade $routeMiddleware. Neste exemplo, vou utilizar o auth para fazer a autenticação de login.

Fazendo o Migration de usuários

Em nosso exemplo utilizarei este modelo. Assim, vou definir que a tela de login não necessitará do Middleware.

A primeira coisa a fazer aqui, é criar uma tabela nova de usuários. O Laravel já disponibiliza uma por padrão. Neste caso, vou utilizá-la, mas, você pode criar uma com os seus próprios padrões.

Então, voltando aos migrations, vou pegar os arquivos create_users_table e create_password_resets_table para criar as tabelas de login. Se tudo der certo em sua migração, você terá as duas novas tabelas para implementarmos o login.

Definindo um Middleware por rota

Agora, temos que criar as views e rotas para o login e cadastro. Neste ponto, o Laravel também já pensou para nós, e, ao rodar o comando php artisan make:auth, você verá que seu projeto ganha automaticamente alguns arquivos:

  • app/Http/Controllers/HomeController.php
  • resources/Http/Controllers/auth/
  • resources/views/auth

No arquivo de rotas web.php você verá uma rota específica de autenticação Auth::routes();. Essa linha já engloba as rotas de login, logout, reset password, forgot password e register.

Além disso, será registrada uma rota para /home apontando para HomeController@index. Aqui eu vou fazer algumas modificações:

  • Primeiro, vou reapontar o /home para /, na rota.
  • Vou trocar a definição do HomeController@index, na rota, para a ProductsController@index
  • Especificamente para este projeto vou apontar as variáveis $redirectTo, da Controller LoginController, RegisterControllerResetPasswordController e VerificationController para/
  • No Middleware RedirectIfAuthenticated também vou fazer a alteração do /home para /.

Essas modificações são porque eu não quero ter uma rota home, já que ela será a própria raiz do meu domínio.

Se você está um pouco perdido com relação as rotas leia o artigo sobre Controllers que eu fiz há um tempo atrás. Nele eu explico sobre o registro de rotas no Laravel.

Agora que todos os redirecionamentos e rotas foram criados, só preciso adicionar o Middleware auth nas rotas. Para isso existem 2 maneiras.

A primeira é adicionando rota a rota, como mostro abaixo:

Route::get('/', 'ProductsController@index')->name('home')->middleware('auth');

A segunda é adicionando um Route::group que conterá o Middleware e que abraçará todas as rotas que eu quero proteger com a autenticação. Dessa forma, nosso arquivo web.php ficará assim:

'auth'], function() { Route::get('/', 'ProductsController@index')->name('home'); Route::get('product_lines','ProductLinesController@index')->name('product_line_index'); Route::get('product_lines/{product_line}','ProductLinesController@show')->name('product_line_show'); Route::post('product_lines/{product_line}/add_product','ProductLinesController@productStore')->name('product_line_product_store'); Route::get('products','ProductsController@index')->name('product_index'); Route::post('products','ProductsController@store')->name('product_store'); Route::get('products/{product}','ProductsController@show')->name('product_show'); Route::get('products/{product}/edit','ProductsController@edit')->name('product_edit'); Route::patch('products/{product}','ProductsController@update')->name('product_update'); Route::get('products/{product}/delete','ProductsController@delete')->name('product_delete'); });

Se você ainda não está acreditando que foi tão fácil adicionar uma validação com sessão de login utilizando Middlewares no Laravel, não se debata. Essa configuração abstrai toda a complexidade de fazer uma session start, validar usuário e senha, e até mesmo, criar uma view do zero.

Concluindo 

Os Middlewares foram implementados no Laravel, para fazer todo o meio de campo entre o início da Request e a chegada na Controller. Assim, conseguimos filtrar e garantir mais segurança no tráfego dos dados dentro do sistema. 

O exemplo acima, foi uma implementação básica que acredito existir em 90% dos sistemas web hoje. O mais importante aqui é você entender o conceito por traz do Middleware, e, sempre que precisar filtrar ou proteger uma requisição, saber que o Middleware está lá para servi-lo.

Como sempre, deixo o tema que vou estudar e compartilhar com vocês. Para o próximo artigo, vou trabalhar com dados na sessão e ver como acessar os dados do meu usuário. Até lá! 😉

Compartilhe:

Sobre o autor:

Sobre o autor:

Posts Relacionados:

Novidades do Blog

Deixe seu e-mail abaixo para passar a receber promoções e novidades do nosso Blog.