Perisian tengah Laravel tidak dapat mengenali bahawa pengguna telah log masuk
P粉935883292
P粉935883292 2024-03-25 23:18:57
0
2
449

Saya menggunakan Laravel 8 dan saya ingin menggunakan perisian tengah untuk menyemak sama ada pengguna telah menetapkan is_staffis_superuser kepada 1 kemudian dia boleh mengakses papan pemuka pentadbir jika tidak, dia tidak boleh mengaksesnya.

Untuk melakukan itu saya mencipta ini:

public function handle($request, Closure $next)
    {
        if(Auth::check()) {
            if(auth()->user()->isSuperUser() || $request->user()->isStaffUser()) {
                return $next($request);
            }else{
                return redirect('/home');
            }
        }else{
            return redirect('/');
        }
    }

Sekarang masalahnya ialah ia kembali redirect('/'); yang bermaksud middleware tidak mengenali bahawa pengguna telah log masuk, tetapi dia sudah log masuk.

Saya telah mendaftarkan middleware seperti ini:

protected $routeMiddleware = [
...
'auth.admin' => \App\Http\Middleware\AdminAuthenticated::class,

dan menggunakannya pada laluan pentadbir saya (RouteServiceProvider.php):

public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            ...

            Route::middleware('auth.admin')
                ->namespace($this->namespace)
                ->prefix('admin')
                ->group(base_path('routes/web/admin.php'));
        });
    }

Ini ialah admin.php laluan:

Route::get('/',function (){
    return view('admin.master');
});

Jadi apa masalahnya di sini? Bagaimanakah saya boleh menyelesaikan masalah ini?

P粉935883292
P粉935883292

membalas semua(2)
P粉354602955

Anda tidak menunjukkan keseluruhan laluan, tetapi saya yakin penggunaan anda tidak akan pernah direkodkan.

Anda boleh memohon:

Route::middleware('auth.admin')
                ->namespace($this->namespace)
                ->prefix('admin')
                ->group(base_path('routes/web/admin.php'));

Untuk semua laluan pengurusan. Oleh itu, anda mempunyai borang log masuk dan apabila anda mengisi data log masuk pengguna mencapai beberapa titik akhir yang juga mempunyai middleware ini digunakan supaya ia tidak pernah mencapai pengawal anda di mana pengguna sebenarnya log masuk kerana middleware mengubah hala kembali ke /.

Semua laluan kecuali kata laluan log masuk/peringatan hendaklah menggunakan perisian tengah, jika tidak, log masuk tidak akan dapat dilakukan.

P粉797004644

Saya rasa anda juga perlu menambah web middleware pada laluan pentadbir.

public function boot()
{
    $this->configureRateLimiting();

    $this->routes(function () {
            ...
        Route::middleware(['web', 'auth.admin'])
            ->namespace($this->namespace)
            ->prefix('admin')
            ->group(base_path('routes/web/admin.php'));
    });
}

Auth::check() Cuba dapatkan pengguna yang sedang log masuk daripada sesi.

web Kumpulan middleware mengaktifkan sesi, yang menggunakan sekumpulan middleware

//app/Http/Kernel.php
 'web' => [
     \App\Http\Middleware\EncryptCookies::class,            
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
     \Illuminate\Session\Middleware\StartSession::class,
     \Illuminate\View\Middleware\ShareErrorsFromSession::class,
     \App\Http\Middleware\VerifyCsrfToken::class,
     \Illuminate\Routing\Middleware\SubstituteBindings::class,
 ],

Tanpa web sesi middleware tidak akan tersedia

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan