67 lines
2.3 KiB
PHP
67 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Pages\Auth;
|
|
|
|
use App\Notifications\ResetPasswordNotification;
|
|
use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException;
|
|
use Exception;
|
|
use Filament\Facades\Filament;
|
|
use Filament\Notifications\Notification;
|
|
use Filament\Pages\Auth\RequestPasswordReset as BaseRequestPasswordReset;
|
|
use Illuminate\Contracts\Auth\CanResetPassword;
|
|
use Illuminate\Support\Facades\Password;
|
|
|
|
class RequestPasswordReset extends BaseRequestPasswordReset
|
|
{
|
|
public function request(): void
|
|
{
|
|
try {
|
|
$this->rateLimit(2);
|
|
} catch (TooManyRequestsException $exception) {
|
|
Notification::make()
|
|
->title(__('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled.title', [
|
|
'seconds' => $exception->secondsUntilAvailable,
|
|
'minutes' => ceil($exception->secondsUntilAvailable / 60),
|
|
]))
|
|
->body(array_key_exists('body', __('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled') ?: []) ? __('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled.body', [
|
|
'seconds' => $exception->secondsUntilAvailable,
|
|
'minutes' => ceil($exception->secondsUntilAvailable / 60),
|
|
]) : null)
|
|
->danger()
|
|
->send();
|
|
|
|
return;
|
|
}
|
|
|
|
$data = $this->form->getState();
|
|
$status = Password::broker(Filament::getAuthPasswordBroker())->sendResetLink(
|
|
$data,
|
|
function (CanResetPassword $user, string $token): void {
|
|
if (! method_exists($user, 'notify')) {
|
|
$userClass = $user::class;
|
|
throw new Exception("Model [{$userClass}] does not have a [notify()] method.");
|
|
}
|
|
|
|
$notification = new ResetPasswordNotification($token);
|
|
$user->notify($notification);
|
|
},
|
|
);
|
|
|
|
if ($status !== Password::RESET_LINK_SENT) {
|
|
Notification::make()
|
|
->title(__($status))
|
|
->danger()
|
|
->send();
|
|
|
|
return;
|
|
}
|
|
|
|
Notification::make()
|
|
->title(__($status))
|
|
->success()
|
|
->send();
|
|
|
|
$this->form->fill();
|
|
}
|
|
}
|