尝试清除路由缓存时出现 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/