|string> */ public function rules(): array { return [ 'email' => ['required', 'string', 'email'], 'password' => ['required', 'string'], 'captcha' => ['required', 'string', 'max:4', new Captcha()], ]; } /** * Get custom messages for validator errors. * * @return array */ public function messages(): array { return [ 'email.required' => 'O e-mail é obrigatório.', 'email.email' => 'Informe um e-mail válido.', 'password.required' => 'A senha é obrigatória.', 'captcha.required' => 'O captcha é obrigatório.', 'captcha.size' => 'O captcha deve ter :size caracteres.', 'captcha' => 'O captcha informado está incorreto.', ]; } /** * Get custom attributes for validator errors. * * @return array */ public function attributes(): array { return [ 'email' => 'e-mail', 'password' => 'senha', 'captcha' => 'captcha', ]; } /** * Attempt to authenticate the request's credentials. * * @throws ValidationException */ public function authenticate(): void { $this->ensureIsNotRateLimited(); if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { RateLimiter::hit($this->throttleKey()); throw ValidationException::withMessages([ 'email' => trans('auth.failed'), ]); } RateLimiter::clear($this->throttleKey()); } /** * Ensure the login request is not rate limited. * * @throws ValidationException */ public function ensureIsNotRateLimited(): void { if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { return; } event(new Lockout($this)); $seconds = RateLimiter::availableIn($this->throttleKey()); throw ValidationException::withMessages([ 'email' => trans('auth.throttle', [ 'seconds' => $seconds, 'minutes' => ceil($seconds / 60), ]), ]); } /** * Get the rate limiting throttle key for the request. */ public function throttleKey(): string { return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); } }