Laravel错误: Unable to prepare route [login] for serialization

标签 laravel laravel-5 routes laravel-sanctum

尝试清除路由缓存时出现 Laravel 错误: 无法准备用于序列化的路由login。另一条路由已被分配名称auth.login。 我有两条身份验证路线:

Route::get('login', [LoginController::class, 'showLoginForm'])->name('auth.login')->middleware('web');
Route::post('login', [AuthController::class, 'authenticate'])->name('auth.login');

我知道存在错误,因为有两条路线同名。但是,如果我从 POST 路由中删除该名称,当我转到登录屏幕 URL 时,我会收到 405 Method not allowed 错误。这很奇怪,因为 POST 路由仅在我输入凭据并单击“登录”按钮时使用,而不是在我转到登录屏幕 URL 时使用。两条 route 的名称相同时一切正常,但这没有意义。

showLoginForm 方法是默认方法。 验证方法是自定义方法:

public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');
    if (Auth::attempt($credentials)) {
        $user = User::where('email', $request->email)->firstOrFail();
        session()->regenerate();
        $user = Auth::user();
        if (session('saved') == null) {
            Session::put('email', $request->email);
            Session::put('password', $request->password);
        }

        return redirect()->intended(route('home'));
    }

    return back()->withErrors([
        'email' => 'The provided credentials do not match our records.',
    ]);
}

最佳答案

我很确定您遇到此问题的原因是因为您有两条同名路由。从 post 路由中删除 ->name('login') ,它应该可以解决问题:

Route::get('login', [LoginController::class, 'showLoginForm'])
    ->name('auth.login')
    ->middleware('web');
Route::post('login', [AuthController::class, 'authenticate']);

关于Laravel错误: Unable to prepare route [login] for serialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67865943/

相关文章:

css - Laravel 5.4 和 Elixir 错误

mysql - Eloquent 查询,可能的 Join

php - Laravel 5 选择唯一的列

javascript - Marionette:基于路由正则表达式启动和停止模块

php - 拉维尔 4 : many to many (insertion)

javascript - 尝试通过 AJAX 发送输入文件数据,无法访问我的 Controller 中的数据

ruby-on-rails - 尽管在 rake 路由中可用,但出现奇怪的路由错误

java - 无法通过使用 Jsprit 向服务提供时间窗口来获得正确的优化路线

php - Laravel 5 和 Angular 从 Controller 获取 JSON

php - 如何在PHP中处理多条件搜索