diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php deleted file mode 100644 index 6708b940..00000000 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ /dev/null @@ -1,63 +0,0 @@ - Route::has('password.request'), - 'status' => $request->session()->get('status'), - ]); - } - - /** - * Handle an incoming authentication request. - */ - public function store(LoginRequest $request): RedirectResponse - { - $user = $request->validateCredentials(); - - if (Features::enabled(Features::twoFactorAuthentication()) && $user->hasEnabledTwoFactorAuthentication()) { - $request->session()->put([ - 'login.id' => $user->getKey(), - 'login.remember' => $request->boolean('remember'), - ]); - - return to_route('two-factor.login'); - } - - Auth::login($user, $request->boolean('remember')); - - $request->session()->regenerate(); - - return redirect()->intended(route('dashboard', absolute: false)); - } - - /** - * Destroy an authenticated session. - */ - public function destroy(Request $request): RedirectResponse - { - Auth::guard('web')->logout(); - - $request->session()->invalidate(); - $request->session()->regenerateToken(); - - return redirect('/'); - } -} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php deleted file mode 100644 index 57f53acc..00000000 --- a/app/Http/Requests/Auth/LoginRequest.php +++ /dev/null @@ -1,94 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'email' => ['required', 'string', 'email'], - 'password' => ['required', 'string'], - ]; - } - - /** - * Validate the request's credentials and return the user without logging them in. - * - * @throws \Illuminate\Validation\ValidationException - */ - public function validateCredentials(): User - { - $this->ensureIsNotRateLimited(); - - /** @var User|null $user */ - $user = Auth::getProvider()->retrieveByCredentials($this->only('email', 'password')); - - if (! $user || ! Auth::getProvider()->validateCredentials($user, $this->only('password'))) { - RateLimiter::hit($this->throttleKey()); - - throw ValidationException::withMessages([ - 'email' => trans('auth.failed'), - ]); - } - - RateLimiter::clear($this->throttleKey()); - - return $user; - } - - /** - * Ensure the login request is not rate limited. - * - * @throws \Illuminate\Validation\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 $this->string('email') - ->lower() - ->append('|'.$this->ip()) - ->transliterate() - ->value(); - } -} diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php index c22f7618..8f36cde7 100644 --- a/app/Providers/FortifyServiceProvider.php +++ b/app/Providers/FortifyServiceProvider.php @@ -6,7 +6,8 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\ServiceProvider; -use Inertia\Inertia; +use Illuminate\Support\Str; +use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable; use Laravel\Fortify\Fortify; class FortifyServiceProvider extends ServiceProvider @@ -24,11 +25,16 @@ public function register(): void */ public function boot(): void { - Fortify::twoFactorChallengeView(fn () => Inertia::render('auth/TwoFactorChallenge')); - Fortify::confirmPasswordView(fn () => Inertia::render('auth/ConfirmPassword')); + Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class); RateLimiter::for('two-factor', function (Request $request) { return Limit::perMinute(5)->by($request->session()->get('login.id')); }); + + RateLimiter::for('login', function (Request $request) { + $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip()); + + return Limit::perMinute(5)->by($throttleKey); + }); } } diff --git a/config/fortify.php b/config/fortify.php index df49e4f8..051f6758 100644 --- a/config/fortify.php +++ b/config/fortify.php @@ -130,7 +130,7 @@ | */ - 'views' => true, + 'views' => false, /* |-------------------------------------------------------------------------- diff --git a/resources/js/pages/auth/Login.vue b/resources/js/pages/auth/Login.vue index 1f307841..04a6379b 100644 --- a/resources/js/pages/auth/Login.vue +++ b/resources/js/pages/auth/Login.vue @@ -1,5 +1,4 @@