Метод GET не поддерживается при перенаправлении обратно в Laravel - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь перенаправить пользователя обратно на предыдущую страницу, если введенный токен недействителен, но я получаю сообщение об ошибке:

Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST.

Все работает хорошо, если токен действителен. Вот мой код:

ForgotPasswordController

public function showPasswordResetForm(Request $request)
{
    $inputToken = $request->token;
    $tokenData = DB::table('password_resets')
                    ->where('token', $inputToken)
                    ->first();

    if ( ! $tokenData) {
      return redirect()
            ->back()
            //redirect back if the token does not exist  
            ->withErrors(['token' => 'Token doesnt exist']);
    } 

    $token = $tokenData->token;

    return view('auth.passwords.reset')->with('token', $token);
}

Маршрут

 Route::get('reset-password/{token}', 'Auth\ForgotPasswordController@showPasswordResetForm')
        ->name('check.token');

Blade

<form method="POST" action="{{ route('check.token',$token) }}">
    @csrf

    <div class="form-group row">
        <label for="token" class="col-md-4 col-form-label text-md-right">
            {{ __('Reset code') }}
        </label>

        <div class="col-md-6">
            <input 
                id='token'
                type="text"
                class="form-control @error('token') is-invalid @enderror" 
                name="token" 
                required 
                autocomplete="token"  
                autofocus
            >

            @error('token')
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
            @enderror
        </div>
    </div>

    <div class="form-group row mb-0">
        <div class="col-md-6 offset-md-4">
            <button type="submit" class="btn btn-primary">
                {{ __('Continue') }}
            </button>
        </div>
    </div>
</form>

1 Ответ

0 голосов
/ 06 октября 2019

Прежде всего, если вы отправляете данные через форму, вам следует избегать использования GET (как определено в вашем маршруте). Вы делаете запрос на публикацию, поэтому он должен соответствовать определенной конечной точке. Поверьте на это:

/** view */

<form method="POST" action="{{ route('check.token', $token) }}">
    //       ^^^^^
</form>

/** route */

Route::post('reset-password/{token}', '/** ... */')->name('check.token');
//     ^^^^

Теперь, ошибка возникает при выполнении перенаправления назад, это не относится к этой конечной точке, а к предыдущей, той, которая показывает эту форму. Похоже, что предыдущая конечная точка определена как POST вместо GET, это то, что вы должны изменить, чтобы исправить проблему.

Мы не можем видеть, как определяется этот маршрут, поэтому я 'Я буду использовать пример. Попробуйте изменить его с:

Route::post('show-form', 'MyController@myMethod');

На это:

Route::get('show-form', 'MyController@myMethod');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...