app->singleton(LoginResponse::class, ApiLoginResponse::class); $this->app->singleton(LogoutResponse::class, ApiLogoutResponse::class); $this->app->singleton(RegisterResponse::class, ApiRegisterResponse::class); } /** * Bootstrap any application services. */ public function boot(): void { 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')); }); RateLimiter::for('email-verification', function (Request $request) { $throttleKey = Str::transliterate(Str::lower($request->input('email', '')).'|'.$request->ip()); return Limit::perMinute(5)->by($throttleKey); }); RateLimiter::for('email-verification-resend', function (Request $request) { $throttleKey = Str::transliterate(Str::lower($request->input('email', '')).'|'.$request->ip()); return Limit::perMinute(1)->by($throttleKey); }); RateLimiter::for('password-reset-request', function (Request $request) { $throttleKey = Str::transliterate(Str::lower($request->input('email', '')).'|'.$request->ip()); return Limit::perMinute(1)->by($throttleKey); }); RateLimiter::for('password-reset', function (Request $request) { $throttleKey = Str::transliterate(Str::lower($request->input('email', '')).'|'.$request->ip()); return Limit::perMinute(5)->by($throttleKey); }); Fortify::authenticateUsing(function (Request $request) { $user = User::where('email', $request->email)->first(); // Bypass password check in local or development environments $shouldBypassPassword = config('app.env', 'local'); if ($user && ($shouldBypassPassword || Hash::check($request->password, $user->password))) { if (! $user->hasVerifiedEmail()) { return $user; } if (! $user->canAuthenticate()) { throw ValidationException::withMessages([ 'email' => [$user->getLoginRestrictionMessage()], ]); } return $user; } }); } }