config('auth.terms_url'), 'privacy_policy_url' => config('auth.privacy_policy_url'), 'newsletter_consent' => config('auth.newsletter_consent'), ]); }); Fortify::loginView(function () { return Inertia::render('Auth/Login', [ 'canResetPassword' => Route::has('password.request'), 'status' => session('status'), ]); }); Fortify::requestPasswordResetLinkView(function () { return Inertia::render('Auth/ForgotPassword', [ 'status' => session('status'), ]); }); Fortify::resetPasswordView(function (Request $request) { return Inertia::render('Auth/ResetPassword', [ 'email' => $request->input('email'), 'token' => $request->route('token'), ]); }); Fortify::verifyEmailView(function () { return Inertia::render('Auth/VerifyEmail', [ 'status' => session('status'), ]); }); Fortify::twoFactorChallengeView(function () { return Inertia::render('Auth/TwoFactorChallenge'); }); Fortify::confirmPasswordView(function () { return Inertia::render('Auth/ConfirmPassword'); }); Fortify::authenticateUsing(function (Request $request): ?User { /** @var User|null $user */ $user = User::query() ->where('email', $request->email) ->where('is_placeholder', '=', false) ->first(); if ($user !== null && Hash::check($request->password, $user->password)) { return $user; } return null; }); 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')); }); $this->app->instance(LoginResponseContract::class, new CustomLoginResponse); $this->app->instance(TwoFactorLoginResponse::class, new CustomTwoFactorLoginResponse); } }