簡體   English   中英

Laravel 8 Auth 中間件保護路由失敗

[英]Laravel 8 Auth middleware protected route failing

我正在使用 Metronic 8 Laravel 主題構建我的第一個 Laravel 應用程序。 它使用 Breeze 進行身份驗證。 我改變了一些東西 - 為未登錄的用戶創建了一個歡迎頁面,並將作為索引的主模板移動到一個受身份驗證保護的"/dashboard" 問題是它仍然嘗試加載儀表板 Blade 模板,而不管身份驗證,導致錯誤。

路線

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth'])->name('dashboard');

這是 Authenticate,它應該將未經身份驗證的用戶重定向到登錄頁面。

protected function redirectTo($request)
{
    if (! $request->expectsJson()) {
        return route('login');
    }
}

當我沒有登錄並導航到儀表板 URL 時,它會嘗試加載儀表板 Blade 模板,該模板調用一個菜單函數來檢查菜單項的用戶權限。 不幸的是,由於沒有用戶,應用程序因將空值傳遞給需要用戶array/object的方法而崩潰。

關於在哪里尋找問題的任何想法? 在我看來,身份驗證中間件應該在未登錄時嘗試加載 Blade 模板之前重定向到登錄頁面。

我會像這樣將中間件放在路線的開頭,盡管我確定它不會導致問題-

Route::middleware(['auth'])->get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

除此之外,請提供有關錯誤本身的一些信息,例如錯誤是關於什么/說什么......等等......

首先,確保您在routes/web.php文件中定義了一個名為 route 的login名。 它應該看起來像:

Route::get('/login', '<controller>@<method>')->name('login');

重要的一點是->name('login')以便Authenticate中間件可以正確識別要重定向到的路由。 適當更改<controller>@<method>以路由到您的應用程序的登錄方法。

Wakil 的回答無關緊要,實際上與 文檔相反。 你的語法是正確的。

我想通了這個問題。 Keen Themes 調用了一種方法,以在 Web 路由文件中構建菜單項數組。 那是調用有問題的代碼。 在我將其包裝在身份驗證檢查中后,錯誤已修復,一切都按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM