Saya menggunakan Laravel 8 dan saya ingin menggunakan perisian tengah untuk menyemak sama ada pengguna telah menetapkan is_staff
或 is_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?
Anda tidak menunjukkan keseluruhan laluan, tetapi saya yakin penggunaan anda tidak akan pernah direkodkan.
Anda boleh memohon:
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.
Saya rasa anda juga perlu menambah
web
middleware pada laluan pentadbir.Auth::check()
Cuba dapatkan pengguna yang sedang log masuk daripada sesi.web
Kumpulan middleware mengaktifkan sesi, yang menggunakan sekumpulan middlewareTanpa
web
sesi middleware tidak akan tersedia