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.

关于在哪里寻找问题的任何想法?在我看来,auth 中间件应该在未登录时尝试加载 Blade 模板之前重定向到登录页面。

我会像这样将中间件放在路由的开头,但我确定这不会导致问题-

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

除此之外,请提供一些关于错误本身的信息,例如错误是什么 about/what 说的......等等...

首先,确保在 routes/web.php 文件中定义了 login 命名路由。它应该看起来像:

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

重要的一点是 ->name('login') 以便 Authenticate 中间件可以正确识别要重定向到的路由。适当更改 <controller>@<method> 以路由到您应用的登录方法。

Wakil 的回答是无关紧要的,实际上与 the documentation 相反。你的语法是正确的。

我想通了这个问题。 Keen Themes 调用一个方法来在 Web 路由文件中构建菜单项数组。那是调用有问题的代码。在我将其包装在身份验证检查中后,错误已修复,一切都按预期进行。