1

我正在使用 Metronic 8 Laravel 主题构建我的第一个 Laravel 应用程序。它使用 Breeze 进行身份验证。我改变了一些事情 - 为未登录的用户创建了一个欢迎页面,并将作为索引的主模板移动到 auth protected "/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 模板,该模板调用一个菜单函数来检查用户对菜单项的权限。不幸的是,由于没有用户,应用程序会因为将 null 值传递给期望用户的方法而崩溃array/object

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

4

3 回答 3

1

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

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

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

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

于 2021-10-21T14:50:28.677 回答
1

我会像这样将中间件放在路线的开头,尽管我确信它不会导致问题 -

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

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

于 2021-10-15T13:06:54.820 回答
0

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

于 2021-11-07T06:27:35.363 回答