Laravel 9 重置密码时"The password field is required."错误



我正在使用内置的身份验证屏幕与我的Laravel 9应用程序。forgot-password.blade.phpemail的单个字段。为什么我得到The password field is required.错误时,我假定不记得我的密码?

forgot-password.blade.php

<div class="w-lg-500px bg-body rounded shadow-sm p-10 p-lg-15 mx-auto">
<form class="form w-100" method="POST" action="{{ route('password.update') }}">
@csrf
<input type="hidden" name="token" value="{{ csrf_token() }}">
<div class="text-center mb-10">
<h1 class="text-dark mb-3">Forgot Password ?</h1>
<div class="text-gray-400 fw-bold fs-4">Enter your email to reset your password.</div>
</div>
<div class="fv-row mb-10">
<x-label for="email" :value="__('Email')" class="form-label fw-bolder text-gray-900 fs-6"/>
<x-input id="email" class="form-control form-control-solid" type="email" name="email"
:value="old('email')" required autofocus/>
</div>
<div class="d-flex flex-wrap justify-content-center pb-lg-0">
<button type="submit" id="kt_password_reset_submit" class="btn btn-lg btn-primary fw-bolder me-4">
<span class="indicator-label">Submit</span>
<span class="indicator-progress">Please wait...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span></span>
</button>
<a href="/" class="btn btn-lg btn-light-primary fw-bolder">Cancel</a>
</div>
</form>
</div>

PasswordResetLinkController.php

<?php
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesPassword;
class PasswordResetLinkController extends Controller
{
/**
* Display the password reset link request view.
*
* @return IlluminateViewView
*/
public function create()
{
return view('auth.forgot-password');
}
/**
* Handle an incoming password reset link request.
*
* @param  IlluminateHttpRequest  $request
* @return IlluminateHttpRedirectResponse
*
* @throws IlluminateValidationValidationException
*/
public function store(Request $request)
{
$request->validate([
'email' => ['required', 'email'],
]);
// We will send the password reset link to this user. Once we have attempted
// to send the link, we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
$status = Password::sendResetLink(
$request->only('email')
);
return $status == Password::RESET_LINK_SENT
? back()->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}

auth.php

<?php
use AppHttpControllersAuthAuthenticatedSessionController;
use AppHttpControllersAuthConfirmablePasswordController;
use AppHttpControllersAuthEmailVerificationNotificationController;
use AppHttpControllersAuthEmailVerificationPromptController;
use AppHttpControllersAuthNewPasswordController;
use AppHttpControllersAuthPasswordResetLinkController;
use AppHttpControllersAuthRegisteredUserController;
use AppHttpControllersAuthVerifyEmailController;
use IlluminateSupportFacadesRoute;
Route::middleware('guest')->group(function () {
Route::get('register', [RegisteredUserController::class, 'create'])
->name('register');
Route::post('register', [RegisteredUserController::class, 'store']);
Route::get('login', [AuthenticatedSessionController::class, 'create'])
->name('login');
Route::post('login', [AuthenticatedSessionController::class, 'store']);
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}', [NewPasswordController::class, 'create'])
->name('password.reset');
Route::post('reset-password', [NewPasswordController::class, 'store'])
->name('password.update');
});
Route::middleware('auth')->group(function () {
Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke'])
->name('verification.notice');
Route::get('verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
->middleware(['signed', 'throttle:6,1'])
->name('verification.verify');
Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
->middleware('throttle:6,1')
->name('verification.send');
Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
->name('password.confirm');
Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
->name('logout');
});

问题是表单的路由操作,您将请求发送到名为password.update的路由,但良好的路由是password.request,只需在视图中更改

...
<form class="form w-100" method="POST" action="{{ route('password.request') }}">
...