Yes, it is possible to override the error message shown on the forgot password form in Laravel Fortify. You can achieve this by customizing the Fortify password reset controller.
Here's how you can do it:
- Create a new controller that extends the Fortify password reset controller:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Laravel\Fortify\Http\Controllers\PasswordResetLinkController as FortifyPasswordResetLinkController;
class PasswordResetLinkController extends FortifyPasswordResetLinkController
{
/**
* Send a reset link to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function store(Request $request)
{
$request->validate(['email' => 'required|email']);
$status = Password::sendResetLink(
$request->only('email')
);
if ($status === Password::RESET_LINK_SENT) {
return back()->with('status', 'A reset link has been sent to your email address.');
}
return back()->withErrors(['email' => __($status)]);
}
}
- Update your
routes/web.phpfile to use the new controller:
use App\Http\Controllers\Auth\PasswordResetLinkController;
Route::get('/forgot-password', [PasswordResetLinkController::class, 'create'])
->middleware(['guest'])
->name('password.request');
Route::post('/forgot-password', [PasswordResetLinkController::class, 'store'])
->middleware(['guest'])
->name('password.email');
- Finally, update your Blade view to display the success message:
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
That's it! Now when a user submits the forgot password form, they will see a success message instead of an error message.