亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Laravel 中間件無(wú)法識(shí)別用戶已登錄
P粉935883292
P粉935883292 2024-03-25 23:18:57
0
2
566

我正在使用 Laravel 8,我想應(yīng)用一個(gè)中間件來(lái)檢查用戶是否將 is_staffis_superuser 設(shè)置為 1,然后他可以訪問(wèn)管理儀表板,否則他無(wú)法訪問(wèn)它。

為了做到這一點(diǎn),我創(chuàng)建了這個(gè):

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('/');
        }
    }

現(xiàn)在的問(wèn)題是它返回 redirect('/'); 意味著中間件無(wú)法識(shí)別用戶已經(jīng)登錄,但他已經(jīng)登錄了。

我已經(jīng)像這樣注冊(cè)了中間件:

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

并將其應(yīng)用到我的管理路由(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'));
        });
    }

這是 admin.php 路由:

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

那么這里出了什么問(wèn)題呢?我該如何解決這個(gè)問(wèn)題?

P粉935883292
P粉935883292

全部回復(fù)(2)
P粉354602955

您沒(méi)有顯示整個(gè)路由,但我敢打賭您的使用永遠(yuǎn)不會(huì)被記錄。

您可能會(huì)申請(qǐng):

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

對(duì)于所有管理路由。因此,您有登錄表單,當(dāng)您填寫登錄數(shù)據(jù)時(shí),用戶會(huì)點(diǎn)擊某個(gè)也應(yīng)用此中間件的端點(diǎn),因此它永遠(yuǎn)不會(huì)到達(dá)您實(shí)際登錄用戶的控制器,因?yàn)橹虚g件重定向回 /。

除了登錄/提醒密碼之外的所有路由都應(yīng)該應(yīng)用中間件,否則無(wú)法登錄。

P粉797004644

我認(rèn)為您還需要將 web 中間件添加到管理路由中。

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() 嘗試從會(huì)話中獲取當(dāng)前登錄的用戶。

web 中間件組激活會(huì)話,它應(yīng)用了一堆中間件

//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,
 ],

沒(méi)有 web 中間件會(huì)話將不可用

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板