Middleware global Laravel 5.7 tidak berfungsi

Saya ingin membuat middleware di proyek laravel saya untuk memeriksa jenis pengguna apa yang login ke situs web saya. Idenya adalah saya memeriksa apakah pengguna login di middleware dan kemudian mengatur variabel sesi ke nilai tertentu.

Ini adalah middlewarenya:

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);
    }
}

Saya telah mendaftarkannya sebagai middleware global seperti yang dijelaskan dalam dokumen dengan menambahkan baris ini ke Kernel.php:

protected $middleware = [
    // ...
    \App\Http\Middleware\CheckIfLoggedin::class,
];

Dan saya memeriksa nilai variabel sesi ini di template blade saya seperti ini:

@if(session('loggedin'))
    <!-- some html code -->
@endif

Saya tahu bahwa saya juga dapat menggunakan ini untuk verifikasi login:

@auth
    <!-- some html code -->
@endauth

tetapi alasan menggunakan variabel sesi ini adalah karena akan ada berbagai jenis anggota (seperti member atau admin) dan saya akan menetapkan jenis login ke variabel sesi itu nanti, maka variabel tersebut akan berfungsi seperti ini di templat blade:

@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

Adakah ide mengapa middleware ini tidak berfungsi seperti yang saya harapkan? Perhatikan bahwa saya cukup baru mengenal Laravel...

Terima kasih!


person wohe1    schedule 18.09.2018    source sumber


Jawaban (1)


Anda perlu memulai sesi sebelum dapat melakukan pekerjaan apa pun dengannya, jika Anda membaca stok kernel.php Anda akan melihat bahwa sesi dimulai hanya di grup web (melalui \Illuminate\Session\Middleware\StartSession::class), jadi Anda perlu menambahkan middleware Anda sendiri di bawahnya.

protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

Catatan: Yang akan saya lakukan adalah memanfaatkan kebijakan dan gerbang dan mungkin penjaga bea cukai tetapi bukan sesi untuk pekerjaan semacam ini.

person Kyslik    schedule 18.09.2018