Ошибка Laravel: невозможно подготовить маршрут [логин] для сериализации.

Я получаю сообщение об ошибке 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-адрес экрана входа в систему. Все работает нормально с одинаковыми именами в обоих маршрутах, но это не имеет смысла.

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.',
    ]);
}

person Josh    schedule 07.06.2021    source источник
comment
Вы используете аутентификацию по умолчанию или пишете свои собственные методы аутентификации. если так, покажите нам также код контроллера   -  person John Lobo    schedule 07.06.2021
comment
обновил вопрос   -  person Josh    schedule 07.06.2021
comment
using Auth :: routes (); Я получаю ошибку 405 Method Not Allowed   -  person Josh    schedule 07.06.2021


Ответы (2)


Я почти уверен, что эта проблема возникает из-за того, что у вас есть два маршрута с одинаковым именем. Удалите ->name('login') из маршрута post, и это должно решить проблему:

Route::get('login', [LoginController::class, 'showLoginForm'])
    ->name('auth.login')
    ->middleware('web');
Route::post('login', [AuthController::class, 'authenticate']);
person Rwd    schedule 07.06.2021
comment
Конечно, но, как я уже писал в вопросе, если я удалю имя из маршрута POST, я получу ошибку 405 Method Not Allowed. - person Josh; 07.06.2021
comment
Это настоящая проблема, почему я получаю ошибку «Этот метод не разрешен»? - person Josh; 07.06.2021
comment
Кажется, что должен быть маршрут входа в систему POST, даже если он не используется на экране входа в систему. Это очень странно. - person Josh; 07.06.2021
comment
Маршрут все еще должен существовать, просто имя используется только для маршрута GET. Это не должно быть проблемой, поскольку URI для обоих маршрутов одинаковый. Не могли бы вы указать свой вопрос и указать, где вы используете имя маршрута, которое вызывает проблему. - person Rwd; 08.06.2021

Похоже, это ошибка Laravel.

Если я бегу:

php artisan route:cache

Я получаю ошибку 405 Method Not Allowed.

Но если я побегу:

php artisan route:clear

Теперь все работает нормально.

person Josh    schedule 09.06.2021