ฉันต้องการสร้างมิดเดิลแวร์ในโปรเจ็กต์ laravel ของฉันเพื่อตรวจสอบว่าผู้ใช้ประเภทใดที่ล็อกอินเข้าสู่เว็บไซต์ของฉัน แนวคิดก็คือ ฉันจะตรวจสอบว่าผู้ใช้เข้าสู่ระบบในมิดเดิลแวร์หรือไม่ จากนั้นจึงตั้งค่าตัวแปรเซสชันเป็นค่าที่แน่นอน
นี่คือมิดเดิลแวร์:
CheckIfLoggedin.php
use Closure;
use Auth;
class CheckIfLoggedin
{
public function handle($request, Closure $next)
{
if (Auth::check()) {
$request->session()->put('loggedin', 'admin');
}
return $next($request);
}
}
ฉันได้ลงทะเบียนเป็นมิดเดิลแวร์ส่วนกลางตามที่อธิบายไว้ในเอกสารโดยเพิ่มบรรทัดนี้ใน Kernel.php:
protected $middleware = [
// ...
\App\Http\Middleware\CheckIfLoggedin::class,
];
และฉันตรวจสอบค่าของตัวแปรเซสชันนี้ในเทมเพลตเบลดของฉันดังนี้:
@if(session('loggedin'))
<!-- some html code -->
@endif
ฉันรู้ว่าฉันสามารถใช้สิ่งนี้เพื่อยืนยันการเข้าสู่ระบบได้:
@auth
<!-- some html code -->
@endauth
แต่เหตุผลในการใช้ตัวแปรเซสชันนี้คือ ฉันจะมีสมาชิกหลายประเภท (เช่น member
หรือ admin
) และฉันจะกำหนดประเภทการเข้าสู่ระบบให้กับตัวแปรเซสชันนั้นในภายหลัง จากนั้นควรจะทำงานในลักษณะนี้ในเทมเพลตเบลด:
@if(session('loggedin')=='member')
<!-- some html code that only members can see -->
@elseif(session('loggedin')=='admin')
<!-- some html code that only admins can see -->
@endif
มีความคิดเห็นใดบ้างว่าทำไมมิดเดิลแวร์นี้ถึงไม่ทำงานอย่างที่ฉันคาดหวังไว้ โปรดทราบว่าฉันค่อนข้างใหม่กับ Laravel แม้ว่า ...
ขอบคุณ!