นี่คือสำหรับ 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 สำหรับทั้ง dev ในเครื่องและการใช้งานจริงดังนั้นจึงไม่จำเป็นต้องทำ
เพิ่มสิ่งต่อไปนี้ใน 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 จะยังคงอยู่หลังจากผู้ใช้เข้าชมไซต์ที่ปลอดภัย
หวังว่านี่จะช่วยได้!