Dotyczy to Larave 5.2.xi nowszych. Jeśli chcesz mieć możliwość obsługi niektórych treści przez HTTPS, a innych przez HTTP, oto rozwiązanie, które dla mnie zadziałało. Możesz się zastanawiać, dlaczego ktoś miałby chcieć udostępniać tylko niektóre treści przez HTTPS? Dlaczego nie obsługiwać wszystkiego przez HTTPS?
Chociaż obsługiwanie całej witryny przez HTTPS jest całkowicie w porządku, odcięcie wszystkiego przez HTTPS ma dodatkowe obciążenie na serwerze. Pamiętaj, że szyfrowanie nie jest tanie. Niewielki narzut ma również wpływ na czas odpowiedzi aplikacji. Można argumentować, że sprzęt jest tani, a wpływ jest znikomy, ale dygresję :) Nie podoba mi się pomysł obsługi dużych stron treści marketingowych z obrazami itp. Przez https. Więc oto jest. Jest podobny do tego, co inni sugerują powyżej, używając oprogramowania pośredniego, ale jest to pełne rozwiązanie, które pozwala przełączać się między HTTP / HTTPS.
Najpierw utwórz oprogramowanie pośredniczące.
php artisan make:middleware ForceSSL
Tak powinno wyglądać Twoje oprogramowanie pośredniczące.
<?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);
}
}
Zauważ, że nie filtruję na podstawie środowiska, ponieważ mam konfigurację HTTPS zarówno dla lokalnego tworzenia, jak i produkcji, więc nie ma takiej potrzeby.
Dodaj poniższe do swojej trasy: RouteMiddleware \ App \ Http \ Kernel.php, abyś mógł wybrać i wybrać, która grupa tras ma wymuszać 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,
];
Następnie chciałbym zabezpieczyć logowanie / rejestrację w dwóch podstawowych grupach itp. I wszystko inne za oprogramowaniem pośredniczącym uwierzytelniania.
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
});
Upewnij się, że oprogramowanie pośredniczące jest prawidłowo stosowane do tras z konsoli.
php artisan route:list
Teraz, gdy zabezpieczyłeś wszystkie formularze lub wrażliwe obszary aplikacji, kluczem jest teraz użycie szablonu widoku do zdefiniowania bezpiecznych i publicznych (innych niż HTTPS) łączy.
Na podstawie powyższego przykładu wyrenderowałbyś swoje bezpieczne linki w następujący sposób -
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Niezabezpieczone linki mogą być renderowane jako
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
To powoduje renderowanie w pełni kwalifikowanego adresu URL, takiego jak https: // twójhost / login i http: // twójhost / aboutus
Jeśli nie wyrenderujesz w pełni kwalifikowanego adresu URL za pomocą http i użyjesz względnego adresu URL linku („/ aboutus”), to https będzie się utrzymywał po odwiedzeniu przez użytkownika bezpiecznej witryny.
Mam nadzieję że to pomoże!