繁体   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