Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 999 | Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
994 lars 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\Rule|array|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->input('email')).'|'.$this->ip());
84
    }
85
}