Bu Larave 5.2.x ve üstü içindir. Bazı içerikleri HTTPS üzerinden ve diğerlerini HTTP üzerinden sunma seçeneğine sahip olmak istiyorsanız, işte benim için çalışan bir çözüm. Merak ediyor olabilirsiniz, birisi neden yalnızca bazı içerikleri HTTPS üzerinden sunmak ister? Neden her şeyi HTTPS üzerinden sunmuyorsunuz?
Tüm siteyi HTTPS üzerinden sunmak tamamen iyi olsa da, her şeyi HTTPS üzerinden ayırmanın sunucunuzda ek bir yükü vardır. Şifrelemenin ucuza gelmediğini unutmayın. Hafif ek yük, uygulamanızın yanıt süresine de etki eder. Emtia donanımının ucuz olduğunu ve etkisinin ihmal edilebilir olduğunu söyleyebilirsiniz ama konuya değiniyorum :) Pazarlama içeriği büyük sayfalar, görseller vb. İle sunulması fikrini https üzerinden sevmiyorum. İşte başlıyor. Başkalarının ara yazılım kullanarak yukarıda önerdiklerine benzer, ancak HTTP / HTTPS arasında geçiş yapmanıza izin veren tam bir çözümdür.
Önce bir ara katman yazılımı oluşturun.
php artisan make:middleware ForceSSL
Ara yazılımınızın nasıl görünmesi gerektiği budur.
<?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);
}
}
Hem yerel geliştirme hem de üretim için HTTPS kurulumuna sahip olduğum için ortama dayalı filtreleme yapmadığımı unutmayın, bu yüzden buna gerek yoktur.
Aşağıdakileri routeMiddleware \ App \ Http \ Kernel.php dosyanıza ekleyin, böylece hangi yönlendirme grubunun SSL'yi zorlaması gerektiğini seçebilir ve seçebilirsiniz.
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,
];
Ardından, iki temel gruba giriş / kayıt vb. Ve Auth ara yazılımın arkasındaki diğer her şeyi güvence altına almak istiyorum.
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
});
Ara yazılımlarınızın rotalarınıza konsoldan düzgün şekilde uygulandığını doğrulayın.
php artisan route:list
Artık uygulamanızın tüm formlarını veya hassas alanlarını güvence altına aldınız, şimdi önemli olan, güvenli ve genel (https olmayan) bağlantılarınızı tanımlamak için görünüm şablonunuzu kullanmaktır.
Yukarıdaki örneğe dayanarak, güvenli bağlantılarınızı aşağıdaki gibi oluşturursunuz -
<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>
Güvenli olmayan bağlantılar şu şekilde oluşturulabilir:
<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>
Bunun yaptığı şey, https: // yourhost / login ve http: // yourhost / aboutus gibi tam nitelikli bir URL oluşturur.
Http ile tam nitelikli URL oluşturmadıysanız ve göreli bir bağlantı url'si ('/ aboutus') kullanıyorsanız, bir kullanıcı güvenli bir siteyi ziyaret ettikten sonra https devam eder.
Bu yardımcı olur umarım!