Laravel 8:从身份验证中间件重定向回来后未定义路由登录

时间:2021-02-23 11:47:08

标签: php laravel laravel-8

我刚刚将此路由组添加到 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 路由 [登录] 未定义。

那么这里出了什么问题,我该如何解决这个错误?

3 个答案:

答案 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) 对其进行排序。

route

答案 2 :(得分:1)

Laravel 在某处使用 login 路由,例如在 \app\Http\Handler.php 中,因此必须有登录路由。您可以按照 Abdulla Nilam 之前所说的那样更改您的路线名称,或者如果您不想更改它,请添加以下内容:

Route::get('/login/redirect', function () {
     return redirect(route('auth.login'));
})->name('login');