Como forçar redirecionamento para HTTPS no Laravel 5.8

Algumas alternativas utilizam configurações no .htaccess para forçar o redirecionamento para HTTPS, mas o Laravel nos oferece uma outra possibilidade usando Middleware

Como forçar redirecionamento para HTTPS no Laravel 5.8

07/08/2019 09:02 Laravel

Sempre que desenvolvo um projeto Web utilizo conexão segura usando SSL que o próprio servidor de hospedagem oferece. Para que o usuário possa acessar de forma segura, preciso que a URL sejá sempre setada como https://dominio.com e nunca http://dominio.com. Sendo assim, é necessário sempre redirecionar a URL para https mesmo se o usuário não digitar.

O Laravel trabalha com Middleware para filtrar requisições HTTP, ou seja, quando o usuário digita alguma URL no navegador, antes que seja exibido algo na tela, essa URL é filtrada e o navegador só exibe o que o Middleware permitir. Por exemplo, quando você está logado em algum site, o Middleware verifica a autenticação do usuário e redireciona para a tela do painel do site, caso contrário, ele redireciona para a tela de login. Você pode saber mais sobre os Middlewares do Laravel na sua própria documentação.

Com esse recurso do Laravel conseguimos também forçar para que a URL seja enviada sempre com o https forçando o acesso seguro. Para isso, de forma muito simples vamos, criar um Middleware, passar a regra pra ele e registra-lo para que toda requisição seja enviada com o https.

Para começar, vamos criar nosso Middleware chamando HttpsProtocol.php utilizando o make do artisan digitando o seguinte comando no seu terminal, dentro do projeto:

php artisan make:middleware HttpsProtocol

Você encontra o Middleware criado na pasta que está em: app/Http/Middleware.

Agora vamos editar esse novo Middleware e adicionar uma verificação dentro da função handle da seguinte forma:

<?php

namespace App\Http\Middleware;

use Closure;

class HttpsProtocol
{
    public function handle($request, Closure $next)
    {
        if (!$request->secure()) {

            return redirect()->secure($request->getRequestUri());

        }
        
        return $next($request);
    }
}

Basicamente, o que acabamos de fazer foi verificar se a requisição foi solicitada de forma segura e caso contrário, redirecioná-la com segurança para a mesma URL digitada.

Tudo certo!

Nosso Middleware já está pronto para realizar sua tarefa e agora precisamos registrá-lo para que o Laravel utilize ele nas requisições HTTP. Para isso, basta adicionar uma linha no arquivo app/Http/Kernel.php, dentro do grupo de Middleware "web" como a seguir:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    
    ...

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \Imobi\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\HttpsProtocol::class,
        ],

        ...

    ];

    ...
}

Pronto!

Seu Middleware está registrado e a partir de agora todas as requisições solicitadas pelo navegador será forçado o uso do https tendo uma conexão segura usando SSL (caso seu provedor de hospedagem possua).

Obs.: Esse procedimento foi testado e validado no Laravel 5.8.

Posts Relacionados

Como criar um contador de visitas para seu blog usando cookies no Laravel 5.8

08/08/2019 14:30 Laravel

Como criar um contador de visitas para seu blog usando cookies no Laravel 5.8

Usaremos a Facades que o Laravel possui para Cookies que nos possibilita trabalhar de forma mais elegante com esse recurso do PHP

Ler mais

Deixe seu comentário