Esto es para Larave 5.2.xy versiones posteriores. Si desea tener una opción para servir algún contenido a través de HTTPS y otros a través de HTTP, aquí hay una solución que funcionó para mí. Quizás se pregunte, ¿por qué alguien querría ofrecer solo algunos contenidos a través de HTTPS? ¿Por qué no servir todo a través de HTTPS?
Aunque está totalmente bien servir todo el sitio a través de HTTPS, cortar todo a través de HTTPS tiene una sobrecarga adicional en su servidor. Recuerde que el cifrado no es barato. La ligera sobrecarga también tiene un impacto en el tiempo de respuesta de su aplicación. Se podría argumentar que el hardware básico es barato y el impacto es insignificante, pero estoy divagando :) No me gusta la idea de ofrecer contenido de marketing en páginas grandes con imágenes, etc. a través de https. Así que aquí va. Es similar a lo que otros han sugerido anteriormente usando middleware, pero es una solución completa que le permite alternar entre HTTP / HTTPS.
Primero cree un middleware.
php artisan make:middleware ForceSSL
Este es el aspecto que debería tener su middleware.
<?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);
}
}
Tenga en cuenta que no estoy filtrando en función del entorno porque tengo una configuración HTTPS tanto para el desarrollo local como para la producción, por lo que no es necesario.
Agregue lo siguiente a su routeMiddleware \ App \ Http \ Kernel.php para que pueda elegir qué grupo de rutas debe forzar 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,
];
A continuación, me gustaría asegurar el inicio de sesión / registro de dos grupos básicos, etc. y todo lo demás detrás del 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 que sus middlewares se hayan aplicado a sus rutas correctamente desde la consola.
php artisan route:list
Ahora que ha asegurado todos los formularios o áreas sensibles de su aplicación, la clave ahora es usar su plantilla de vista para definir sus enlaces seguros y públicos (no https).
Según el ejemplo anterior, representaría sus enlaces seguros de la siguiente manera:
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Los enlaces no seguros se pueden representar como
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
Lo que hace es generar una URL completamente calificada como https: // yourhost / login y http: // yourhost / aboutus
Si no representaba una URL completamente calificada con http y usaba una URL de enlace relativa ('/ aboutus'), https persistirá después de que un usuario visite un sitio seguro.
¡Espero que esto ayude!