Isto é para o Larave 5.2.xe superior. Se você deseja ter uma opção para veicular algum conteúdo por HTTPS e outros por HTTP, aqui está uma solução que funcionou para mim. Você pode se perguntar: por que alguém iria querer exibir apenas algum conteúdo por HTTPS? Por que não servir tudo sobre HTTPS?
Embora seja muito bom servir o site inteiro por HTTPS, cortar tudo em HTTPS tem uma sobrecarga adicional no servidor. Lembre-se de que a criptografia não é barata. A pequena sobrecarga também afeta o tempo de resposta do seu aplicativo. Você poderia argumentar que o hardware básico é barato e o impacto é insignificante, mas eu discordo :) Eu não gosto da idéia de veicular páginas de conteúdo de marketing com páginas etc, com imagens etc. em https. Então aqui vai. É semelhante ao que outros sugeriram acima usando middleware, mas é uma solução completa que permite alternar entre HTTP / HTTPS.
Primeiro, crie um middleware.
php artisan make:middleware ForceSSL
É assim que seu middleware deve se parecer.
<?php
namespace App\Http\Middleware;
use Closure;
class ForceSSL
{
public function handle($request, Closure $next)
{
if (!$request->secure()) {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
}
Observe que eu não estou filtrando com base no ambiente, porque eu tenho a configuração HTTPS para desenvolvimento e produção local, portanto não há necessidade.
Adicione o seguinte ao seu routeMiddleware \ App \ Http \ Kernel.php para poder escolher qual grupo de rotas deve forçar o SSL.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'forceSSL' => \App\Http\Middleware\ForceSSL::class,
];
Em seguida, eu gostaria de proteger dois grupos básicos de login / inscrição, etc, e tudo mais por trás do middleware Auth.
Route::group(array('middleware' => 'forceSSL'), function() {
/*user auth*/
Route::get('login', 'AuthController@showLogin');
Route::post('login', 'AuthController@doLogin');
// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');
//other routes like signup etc
});
Route::group(['middleware' => ['auth','forceSSL']], function()
{
Route::get('dashboard', function(){
return view('app.dashboard');
});
Route::get('logout', 'AuthController@doLogout');
//other routes for your application
});
Confirme se seus middlewares foram aplicados corretamente às suas rotas no console.
php artisan route:list
Agora que você protegeu todos os formulários ou áreas sensíveis do seu aplicativo, a chave agora é usar seu modelo de exibição para definir seus links públicos e seguros (não https).
Com base no exemplo acima, você renderizou seus links seguros da seguinte maneira:
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Links não seguros podem ser renderizados como
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
O que isso faz é renderizar uma URL totalmente qualificada, como https: // yourhost / login e http: // yourhost / aboutus
Se você não processasse o URL totalmente qualificado com http e usasse um URL de link relativo ('/ aboutus'), o https persistiria depois que um usuário visitar um site seguro.
Espero que isto ajude!