requiresConfirmation = $requiresConfirmation; } #[On('start-two-factor-setup')] public function startTwoFactorSetup(): void { $enableTwoFactorAuthentication = app(EnableTwoFactorAuthentication::class); $enableTwoFactorAuthentication(auth()->user()); $this->loadSetupData(); } /** * Load the two-factor authentication setup data for the user. */ private function loadSetupData(): void { $user = auth()->user()?->fresh(); try { if (! $user || ! $user->two_factor_secret) { throw new Exception('Two-factor setup secret is not available.'); } $this->qrCodeSvg = $user->twoFactorQrCodeSvg(); $this->manualSetupKey = decrypt($user->two_factor_secret); } catch (Exception) { $this->addError('setupData', 'Failed to fetch setup data.'); $this->reset('qrCodeSvg', 'manualSetupKey'); } } /** * Show the two-factor verification step if necessary. */ public function showVerificationIfNecessary(): void { if ($this->requiresConfirmation) { $this->showVerificationStep = true; $this->resetErrorBag(); return; } $this->closeModal(); $this->dispatch('two-factor-enabled'); } /** * Confirm two-factor authentication for the user. */ public function confirmTwoFactor(ConfirmTwoFactorAuthentication $confirmTwoFactorAuthentication): void { $this->validate(); $confirmTwoFactorAuthentication(auth()->user(), $this->code); $this->setupComplete = true; $this->closeModal(); $this->dispatch('two-factor-enabled'); } /** * Reset two-factor verification state. */ public function resetVerification(): void { $this->reset('code', 'showVerificationStep'); $this->resetErrorBag(); } /** * Close the two-factor authentication modal. */ public function closeModal(): void { $this->reset( 'code', 'manualSetupKey', 'qrCodeSvg', 'showVerificationStep', 'setupComplete', ); $this->resetErrorBag(); } /** * Get the current modal configuration state. */ public function getModalConfigProperty(): array { if ($this->setupComplete) { return [ 'title' => __('Two-factor authentication enabled'), 'description' => __('Two-factor authentication is now enabled. Scan the QR code or enter the setup key in your authenticator app.'), 'buttonText' => __('Close'), ]; } if ($this->showVerificationStep) { return [ 'title' => __('Verify authentication code'), 'description' => __('Enter the 6-digit code from your authenticator app.'), 'buttonText' => __('Continue'), ]; } return [ 'title' => __('Enable two-factor authentication'), 'description' => __('To finish enabling two-factor authentication, scan the QR code or enter the setup key in your authenticator app.'), 'buttonText' => __('Continue'), ]; } }; ?>
@for ($i = 1; $i <= 5; $i++)
@endfor
@for ($i = 1; $i <= 5; $i++)
@endfor
{{ $this->modalConfig['title'] }} {{ $this->modalConfig['description'] }}
@if ($showVerificationStep)
{{ __('Back') }} {{ __('Confirm') }}
@else @error('setupData') @enderror
@empty($qrCodeSvg)
@else
{!! $qrCodeSvg !!}
@endempty
{{ $this->modalConfig['buttonText'] }}
{{ __('or, enter the code manually') }}
@empty($manualSetupKey)
@else @endempty
@endif