app->singleton( \Laravel\Fortify\Contracts\LoginResponse::class, \App\Http\Responses\ConsoleAwareLoginResponse::class, ); $this->app->singleton( \Laravel\Fortify\Contracts\TwoFactorLoginResponse::class, \App\Http\Responses\ConsoleAwareTwoFactorLoginResponse::class, ); Fortify::createUsersUsing(CreateNewUser::class); Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class); Fortify::updateUserPasswordsUsing(UpdateUserPassword::class); Fortify::resetUserPasswordsUsing(ResetUserPassword::class); Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class); RateLimiter::for('login', function (Request $request) { $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip()); return Limit::perMinute(5)->by($throttleKey); }); RateLimiter::for('two-factor', function (Request $request) { return Limit::perMinute(5)->by($request->session()->get('login.id')); }); // Registration is public (no per-account key), so throttle per IP to blunt // signup spam / CPU-exhaustion via repeated password hashing. RateLimiter::for('registration', fn (Request $request) => Limit::perMinute(10)->by($request->ip())); RateLimiter::for('passkeys', function (Request $request) { $credentialId = $request->input('credential.id'); return Limit::perMinute(10)->by( ($credentialId ?: $request->session()->getId()).'|'.$request->ip() ); }); } }