Ошибка POST и GET после переноса проекта Laravel в новый экземпляр. В чем причина? - PullRequest
1 голос
/ 21 января 2020

Я переместил свой Laravel проект в AWS экземпляр. Все оказалось работать нормально. Когда я go для входа в систему, я получаю ошибку "The GET method is not supported for this route. Supported methods: POST.", которая возникает в функции login(Request $request){}, найденной здесь ./vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php Я пробовал проект на экземплярах Ubuntu и Redhat и получаю ту же ошибку. Я пытаюсь найти другие способы устранения этой ошибки. Любой совет будет оценен.

форма

<form class="form" method="POST" action="{{ route('2faconfirm') }}">

маршруты

Route::post('2faverify', [ 'as' => '2faverify', 'uses' => 'MFAController@verify']);
Route::post('2faconfirm', [ 'as' => '2faconfirm', 'uses' => 'MFAVerifyController@confirm']);

The process I took to migrate
- Dump mysql db for lavarel
- import laravel to new instances
- install php/mysql/composer/npm
- copy over files
- edit .env file to new db

@ Айнбер поднял хорошую мысль. Я использую перенаправление в коде.

    public function 2faverify(Request $request)
    {
        $response = $this->2faSendCode($request->get('email'), $request->get('password'));

        $client   = app()->make(CognitoClient::class);

        if($client->getUserStatus($request->get('email')) == 'FORCE_CHANGE_PASSWORD'){
            return view('auth.passwords.force-password-reset', ['session'=>$response['Session']]);
        }
        if(gettype($response) != 'string'){
            return view('2faverify',['session' => $response['Session']]);
        }else{
            return redirect('login')->withErrors([$response]);
        }
    }





    public function 2faconfirm(Request $request){

        $email      = $request->get('email');
        $password   = $request->get('password');
        $session    = $request->get('session');
        $2faCode    = $request->get('2facode');
        $client     = app()->make(CognitoClient::class);

        if($client->confirm2fa($email, $password,$session, $2faCode)){
            $this->login($request);
            return redirect('dashboard');
        }else{
            return redirect('login')->withErrors(['Code expired!']);
        }

    }

, но я не понимаю, как это может быть проблемой, так как если он выдает ошибку на return redirect(, это означает, что я по крайней мере успешно вошел в систему. Но я ' m не вошел в систему после этой ошибки.

php artisan optimize ошибки ниже

Configuration cache cleared!
Configuration cached successfully!
Route cache cleared!

   LogicException  : Unable to prepare route [api/user] for serialization. Uses Closure.

  at /var/www/html/wave-app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:917
    913|      */
    914|     public function prepareForSerialization()
    915|     {
    916|         if ($this->action['uses'] instanceof Closure) {
  > 917|             throw new LogicException("Unable to prepare route [{$this->uri}] for serialization. Uses Closure.");
    918|         }
    919|
    920|         $this->compileRoute();
    921|

  Exception trace:

  1   Illuminate\Routing\Route::prepareForSerialization()
      /var/www/html/wave-app/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php:62

  2   Illuminate\Foundation\Console\RouteCacheCommand::handle()
      /var/www/html/wave-app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

  Please use the argument -v to see more details.

Я исправил эту ошибку, удалив следующее из маршрутов / API. php

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Я могу запустить оптимизацию без ошибок

Configuration cache cleared!
Configuration cached successfully!
Route cache cleared!
Routes cached successfully!
Files cached successfully!

, но это не исправило ошибку POST при входе в систему.

1 Ответ

0 голосов
/ 21 января 2020

Для тех, кто имеет эту проблему в будущем. Как вы можете сказать, эта ошибка невероятно вводит в заблуждение. Оказывается, ошибка произошла из-за того, что laravel не удалось подключиться или найти существующего пользователя, который пытается войти в систему. Я обнаружил проблему, запустив следующий код в своем логине.

 use App\User; //be sure to include in top of page else a new error will appear

        $user = User::where('email', '=', $request->get('email'))->first();
        if ($user === null) {
           echo "user does not exist";
        } else{
           echo "exists";
        }
        exit();

Я продолжал получать информацию о том, что пользователь не существует. Я исправил проблемы с БД, но все еще допустил ошибку, что пользователь не существует. Наконец, я запустил следующее, и это устранило проблему.

php artisan cache:clear
php artisan config:cache

Это была ошибка из двух частей. Он не мог найти пользователя в БД, и как только я установил соединение с БД, он не смог подключиться, потому что он использовал старую конфигурацию в кеше. Очистка кеша исправила это.

...