getUser()->getIdentity(); if (!$identity->twoFactor) { $this->flashMessage('Dvoufázové ověření nemáte aktivní.', 'info'); $this->redirect(':Home:'); } } protected function createComponentDisableForm(): Form { $form = new Form; $form->addText('code', 'Ověřovací kód:') ->setRequired('Zadejte prosím kód z vaší aplikace.') ->addRule($form::Pattern, 'Kód musí mít 6 číslic', '\d{6}') ->setHtmlAttribute('placeholder', '000 000') ->setHtmlAttribute('autocomplete', 'one-time-code'); $form->addSubmit('disable', 'Potvrdit a vypnout 2FA') ->getControlPrototype()->class('btn btn-danger btn-lg w-100'); $form->onSuccess[] = $this->disableFormSucceeded(...); return $form; } public function disableFormSucceeded(Form $form, \stdClass $data): void { /** * Uživatelská identita = přihlášený user. * @var UserIdentity */ $identity = $this->getUser()->getIdentity(); // Načteme secret z identity (předpokládáme, že tam je z přihlášení) $secret = $identity->totpSecret; if ($this->twoFactorService->verifyCode($secret, $data->code)) { // 1. Zrušení v DB $this->userFacade->disableTOTPSecret(); // 2. Aktualizace identity v session $identity->twoFactor = false; $identity->totpSecret = null; $this->flashMessage('Dvoufázové ověření bylo úspěšně vypnuto.', 'success'); $this->redirect(':Home:'); } else { $form->addError('Zadaný kód není správný. Zkuste to znovu.'); } } }