The GET method is not supported for route reset-password. Supported methods: POST.の解消の仕方を教えていただきたい。

実現したいこと

laravel + vue + inetiaでパスワードリマインダー機能が動作されること。

前提

laravel + vue + inetiaで標準搭載されているファイルを使い、パスワードリマインダー機能を作成中です。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

現在、パスワードを忘れた場合に、メールアドレスを入力し、メールが送られてくるとこまでは、mailtrapで確認済です。
しかし、メールにて、リセットボタンを押し、パスワードリセット画面(メールアドレス、新しいパスワードを入れる画面)に、うつる際に、タイトルのエラーが出ます。

エラーメッセージ
The GET method is not supported for route reset-password. Supported methods: POST.

該当のソースコード

■ルート

コード Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) ->name('password.request');> Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) ->name('password.email'); Route::get('reset-password/{token}', function ($token) { return Inertia::render('Auth/reset-password',[ 'token' => $token ]);})->middleware('guest')->name('password.reset'); Route::get('reset-password', [NewPasswordController::class, 'store']) ->name('password.store'); Route::post('reset-password', [NewPasswordController::class, 'store']) ->name('password.store'); });

■vue

コード <script setup> import GuestLayout from '@/Layouts/GuestLayout.vue'; import InputError from '@/Components/InputError.vue'; import InputLabel from '@/Components/InputLabel.vue'; import PrimaryButton from '@/Components/PrimaryButton.vue'; import TextInput from '@/Components/TextInput.vue'; import { Head, useForm } from '@inertiajs/vue3'; const props = defineProps({ email: String, token: String, }); const form = useForm({ token: props.token, email: props.email, password: '', password_confirmation: '', }); const submit = () => { form.post(route('user.password.store'), { onFinish: () => form.reset('password', 'password_confirmation'), }); }; </script> <template> <GuestLayout> <Head title="Reset Password" /> <form @submit.prevent="submit"> <div> <InputLabel for="email" value="Email" /> <TextInput id="email" type="email" class="mt-1 block w-full" v-model="form.email" required autofocus autocomplete="username" /> <InputError class="mt-2" :message="form.errors.email" /> </div> <div class="mt-4"> <InputLabel for="password" value="Password" /> <TextInput id="password" type="password" class="mt-1 block w-full" v-model="form.password" required autocomplete="new-password" /> <InputError class="mt-2" :message="form.errors.password" /> </div> <div class="mt-4"> <InputLabel for="password_confirmation" value="Confirm Password" /> <TextInput id="password_confirmation" type="password" class="mt-1 block w-full" v-model="form.password_confirmation" required autocomplete="new-password" /> <InputError class="mt-2" :message="form.errors.password_confirmation" /> </div> <div class="flex items-center justify-end mt-4"> <PrimaryButton :class="{ 'opacity-25': form.processing }" :disabled="form.processing"> Reset Password </PrimaryButton> </div> </form> </GuestLayout> </template>

■コントローラー

コード <?php namespace App\Http\Controllers\User\Auth; use App\Http\Controllers\Controller; use Illuminate\Auth\Events\PasswordReset; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Password; use Illuminate\Support\Str; use Illuminate\Validation\Rules; use Inertia\Inertia; class NewPasswordController extends Controller { /** * Display the password reset view. * * @param \Illuminate\Http\Request $request * @return \Illuminate\View\View */ //public function create(Request $request) //{ // dd($request); //return Inertia::render('Auth/reset-password',[ // 'request' => $request // ]); //} /** * Handle an incoming new password request. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse * * @throws \Illuminate\Validation\ValidationException */ public function store(Request $request) { $request->validate([ 'token' => ['required'], 'email' => ['required', 'email'], 'password' => ['required', 'confirmed', Rules\Password::defaults()], ]); // Here we will attempt to reset the user's password. If it is successful we // will update the password on an actual user model and persist it to the // database. Otherwise we will parse the error and return the response. $status = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function ($user) use ($request) { $user->forceFill([ 'password' => Hash::make($request->password), 'remember_token' => Str::random(60), ])->save(); event(new PasswordReset($user)); } ); // If the password was successfully reset, we will redirect the user back to // the application's home authenticated view. If there is an error we can // redirect them back to where they came from with their error message. return $status == Password::PASSWORD_RESET ? redirect()->route('user.login')->with('status', __($status)) : back()->withInput($request->only('email')) ->withErrors(['email' => __($status)]); } }

試したこと

■reset-passwordへ遷移させるルートを、get post両方を記入した。
■new passwordコントローラーのバリデーションに引っかかっているのではないかと思い、public function storeのバリデーションを消した。
結果は同じエラーが出ています。

コメントを投稿

0 コメント