Це для Larave 5.2.x і більше. Якщо ви хочете мати можливість подавати деякий вміст через HTTPS, а інший через HTTP, це рішення, яке працювало для мене. Ви можете задатися питанням: чому хтось хоче подавати лише деякий вміст через HTTPS? Чому б не обслуговувати все через HTTPS?
Хоча обслуговувати весь сайт через HTTPS цілком чудово, якщо все, що над HTTPS, має додаткові накладні витрати на вашому сервері. Пам'ятайте, що шифрування не є дешевим. Невеликі накладні витрати також впливають на час відгуку вашої програми. Ви можете стверджувати, що товарне обладнання дешеве, а його вплив незначний, але мені не подобається :) Мені не подобається ідея подавання маркетингових контент великих сторінок із зображеннями тощо на https. Отож ось це йде. Це схоже на те, що пропонують інші, використовуючи проміжне програмне забезпечення, але це повне рішення, яке дозволяє перемикатися вперед і назад між HTTP / HTTPS.
Спочатку створіть проміжне програмне забезпечення.
php artisan make:middleware ForceSSL
Ось як має виглядати ваше проміжне програмне забезпечення.
<?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);
}
}
Зауважте, що я не фільтрую на основі середовища, тому що у мене є налаштування HTTPS як для локальних розробників, так і для виробництва, тому не потрібно.
Додайте наступне до свого routeMiddleware \ App \ Http \ Kernel.php, щоб ви могли вибрати та вибрати, яку групу маршрутів слід застосовувати 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,
];
Далі, я хотів би забезпечити дві основні групи для входу / реєстрації тощо та все інше, що стоїть за програмним забезпеченням 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
});
Переконайтеся, що ваш середній простір належним чином застосовано до маршрутів із консолі.
php artisan route:list
Тепер ви захистили всі форми або чутливі області вашої програми, головним є використання шаблону перегляду для визначення ваших захищених та публічних (не https) посилань.
Виходячи з наведеного вище прикладу, ви зробите свої безпечні посилання наступним чином -
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Незахищені посилання можуть бути надані як
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
Для цього потрібно отримати повністю кваліфіковану URL-адресу, наприклад https: // yourhost / login та http: // yourhost / aboutus
Якщо ви не надавали повністю кваліфіковану URL-адресу з http та використовували відносний URL-адресу посилання ('/ aboutus'), https зберігатиметься після відвідування захищеного сайту.
Сподіваюся, це допомагає!