我刚刚将此路由组添加到 web.php
:
Route::middleware('auth')->group(function() {
Route::get('profile' , [ProfileController::class, 'index'])->name('profile');
});
如您所见,我使用了中间件 auth
,所以如果我没有登录,它应该会显示登录页面。
而且我还手动定义了身份验证路由:
Route::prefix('auth')->namespace('Auth')->middleware('guest')->group(function() {
Route::get('login' , [LoginController::class, 'showLogin'])->name('auth.login');
Route::post('login' , [LoginController::class, 'login']);
Route::get('register' , [RegisterController::class, 'showRegister'])->name('auth.register');
Route::post('register' , [RegisterController::class, 'register']);
});
所以登录页面的路由名称是 auth.login
,我只是将它添加到 Authenticate
中间件,该中间件在 auth
处设置为 kernel.php
:
'auth' => \App\Http\Middleware\Authenticate::class,
Authenticate.php
:
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('auth.login');
}
}
现在,问题是每当它应该在未登录时向我显示登录页面时,我都会收到此错误消息:
<块引用>Symfony\Component\Routing\Exception\RouteNotFoundException 路由 [登录] 未定义。
那么这里出了什么问题,我该如何解决这个错误?
答案 0 :(得分:2)
app\Exceptions\Handler.php
use Illuminate\Auth\AuthenticationException;
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('auth.login'));
}
答案 1 :(得分:1)
只要改变这个
Route::get('login' , [LoginController::class, 'showLogin'])->name('auth.login');
到这里
Route::get('login' , [LoginController::class, 'showLogin'])->name('login');
<块引用>
这听起来很荒谬,但确实如此。原因是当您调用 login 时,您使用 auth.login
调用它,但 Laravel 只知道 login
。我遇到了类似的问题,并且能够通过定义另一个路由 (GET) 对其进行排序。
答案 2 :(得分:1)
Laravel 在某处使用 login
路由,例如在 \app\Http\Handler.php
中,因此必须有登录路由。您可以按照 Abdulla Nilam
之前所说的那样更改您的路线名称,或者如果您不想更改它,请添加以下内容:
Route::get('/login/redirect', function () {
return redirect(route('auth.login'));
})->name('login');