Mercurial > borealpoint
comparison app/Http/Requests/Auth/LoginRequest.php @ 0:9d7dcd54c677
Initial Commit and package setup
| author | luka |
|---|---|
| date | Sat, 23 Aug 2025 22:20:51 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:9d7dcd54c677 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 namespace App\Http\Requests\Auth; | |
| 4 | |
| 5 use Illuminate\Auth\Events\Lockout; | |
| 6 use Illuminate\Foundation\Http\FormRequest; | |
| 7 use Illuminate\Support\Facades\Auth; | |
| 8 use Illuminate\Support\Facades\RateLimiter; | |
| 9 use Illuminate\Support\Str; | |
| 10 use Illuminate\Validation\ValidationException; | |
| 11 | |
| 12 class LoginRequest extends FormRequest | |
| 13 { | |
| 14 /** | |
| 15 * Determine if the user is authorized to make this request. | |
| 16 */ | |
| 17 public function authorize(): bool | |
| 18 { | |
| 19 return true; | |
| 20 } | |
| 21 | |
| 22 /** | |
| 23 * Get the validation rules that apply to the request. | |
| 24 * | |
| 25 * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> | |
| 26 */ | |
| 27 public function rules(): array | |
| 28 { | |
| 29 return [ | |
| 30 'email' => ['required', 'string', 'email'], | |
| 31 'password' => ['required', 'string'], | |
| 32 ]; | |
| 33 } | |
| 34 | |
| 35 /** | |
| 36 * Attempt to authenticate the request's credentials. | |
| 37 * | |
| 38 * @throws \Illuminate\Validation\ValidationException | |
| 39 */ | |
| 40 public function authenticate(): void | |
| 41 { | |
| 42 $this->ensureIsNotRateLimited(); | |
| 43 | |
| 44 if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { | |
| 45 RateLimiter::hit($this->throttleKey()); | |
| 46 | |
| 47 throw ValidationException::withMessages([ | |
| 48 'email' => trans('auth.failed'), | |
| 49 ]); | |
| 50 } | |
| 51 | |
| 52 RateLimiter::clear($this->throttleKey()); | |
| 53 } | |
| 54 | |
| 55 /** | |
| 56 * Ensure the login request is not rate limited. | |
| 57 * | |
| 58 * @throws \Illuminate\Validation\ValidationException | |
| 59 */ | |
| 60 public function ensureIsNotRateLimited(): void | |
| 61 { | |
| 62 if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { | |
| 63 return; | |
| 64 } | |
| 65 | |
| 66 event(new Lockout($this)); | |
| 67 | |
| 68 $seconds = RateLimiter::availableIn($this->throttleKey()); | |
| 69 | |
| 70 throw ValidationException::withMessages([ | |
| 71 'email' => trans('auth.throttle', [ | |
| 72 'seconds' => $seconds, | |
| 73 'minutes' => ceil($seconds / 60), | |
| 74 ]), | |
| 75 ]); | |
| 76 } | |
| 77 | |
| 78 /** | |
| 79 * Get the rate limiting throttle key for the request. | |
| 80 */ | |
| 81 public function throttleKey(): string | |
| 82 { | |
| 83 return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); | |
| 84 } | |
| 85 } |
