hasChallengedUser()) { $this->clearChallenge($request); return redirect()->route('login'); } return Inertia::render('Auth/TwoFactorChallenge'); } /** * Complete the pending login using a TOTP or recovery code. */ public function store(TwoFactorLoginRequest $request): RedirectResponse { if (! config('auth-ui.features.two_factor') || ! $request->hasChallengedUser()) { $this->clearChallenge($request); return redirect()->route('login'); } $user = $request->challengedUser(); if (! $user->hasEnabledTwoFactorAuthentication()) { $this->clearChallenge($request); return redirect()->route('login'); } if ($recoveryCode = $request->validRecoveryCode()) { $user->replaceRecoveryCode($recoveryCode); } elseif (! $request->hasValidCode()) { event(new TwoFactorAuthenticationFailed($user)); throw ValidationException::withMessages([ $request->filled('recovery_code') ? 'recovery_code' : 'code' => 'The provided authentication code was invalid.', ]); } event(new ValidTwoFactorAuthenticationCodeProvided($user)); Auth::login($user, $request->remember()); $request->session()->regenerate(); return redirect()->intended(config('auth-ui.redirects.login', '/dashboard')); } private function clearChallenge(TwoFactorLoginRequest $request): void { $request->session()->forget(['login.id', 'login.remember']); } }