Diskuze: Nette\Security\AuthenticationException() výjimka a url odkaz
Zobrazeno 6 zpráv z 6.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |


Proč to psát do zprávy vyjímky? Navíc, je to runtime vyjímka a chyba už je poznat z názvu vyjímky, takže tam nepotřebuješ psát žádnou zprávu. Tu vyjímku si odchyť a zprávu napiš do Flash Message
Jinak ten text s odkazem do flash message dostanes tak, ze si vytvoris Html element a ten pak jenom predas ty flash message. Neco na zpusob:
try {
// tady se neco provede
} catch (Nette\Security\AuthenticationException $e) {
// a pokud to skonci chybou, tak presmerujeme a vypiseme zpravu
$odkaz = Nette\Utils\Html::el('a');
$odkaz->href('http://www.seznam.cz'); // url odkazu
$odkaz->setText('odkazem'); // text odkazu
$zprava = Nette\Utils\Html::el();
$zprava->add('Nějaký text s ')->add($odkaz)->add(' na jinou stránku.');
$this->flashMessage($zprava);
$this->redirect('Homepage:abcd');
Jednodussi moznost je vypnout escapovani flashmessage, ale to bych nedelal.
Jojo, todle chápu, díky, ale já si tady takhle vytvářim výjimky (v UserManager), je tam i napsáno kam by tak měl směřovat ten odkaz, jen nevim ja toho docílit.
if (!$row) {
throw new Nette\Security\AuthenticationException('Špatná Emailová adresa.', self::IDENTITY_NOT_FOUND);
} elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
throw new Nette\Security\AuthenticationException('Špatné heslo.', self::INVALID_CREDENTIAL);
}elseif($row[self::COLUMN_STATUS]==1){
throw new Nette\Security\AuthenticationException("Váš účet není aktivní. Nový aktivační email si můžete nechat poslat kliknutím na následující odkaz <a n:href='Login:Resend'>odkaz</a>", self::NOT_APPROVED); // nějak takhle by měl vypadat ten odkaz
} elseif($row[self::COLUMN_STATUS]==0){
throw new Nette\Security\AuthenticationException('Váš účet je zablokován.', self::NOT_APPROVED);
} elseif (Passwords::needsRehash($row[self::COLUMN_PASSWORD_HASH])) {
$row->update(array(
self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
));
}
Potom si přidávám v SignFormFactory ty zprávy z výjimek jako errory do formuláře. Jen nevim vůbec jak na ten odkaz.
try {
$this->user->login($values->username, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
}
Zkus to takhle. Tu AuthenticationException si nech pouze u kontroly E-mailu a hesla i se zprávou (Nebo si taky můžeš vytvorit vlastni vyjimky pro tyhle dva stavy). U tech dalsich stavu si vytvoris vlastni konkretni vyjimky, ktere pote zachytis pri zpracovani prihlaseni. Takže by to mohlo vypadat nejak takhle napriklad:
if (!$row) {
throw new Nette\Security\AuthenticationException('Špatná Emailová adresa.',
self::IDENTITY_NOT_FOUND);
} elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
throw new Nette\Security\AuthenticationException('Špatné heslo.', self::INVALID_CREDENTIAL);
}elseif($row[self::COLUMN_STATUS]==1){
throw new Runtime\InactiveAccountException;
} elseif($row[self::COLUMN_STATUS]==0){
throw new Runtime\InaccessibleAccountException;
} elseif (Passwords::needsRehash($row[self::COLUMN_PASSWORD_HASH])) {
$row->update(
array(self::COLUMN_PASSWORD_HASH => Passwords::hash($password))
);
}
No a potom to muzes zpracovat napriklad takhle:
try {
$this->user->login($values->username, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
return;
} catch (Runtime\InactiveAccountException $i) {
$odkaz = Nette\Utils\Html::el('a');
$odkaz->href($this->link('Login:resend')); // url odkazu
$odkaz->setText('odkaz'); // text odkazu
$zprava = Nette\Utils\Html::el();
$zprava->add('Váš účet není aktivní. Nový aktivační email si můžete nechat poslat kliknutím na
následující ')->add($odkaz);
$form->addError($zprava);
return;
} catch (Runtime\InaccessibleAccountException $ia) {
$form->addError('Váš účet je zablokován.');
return;
}
Proste jde o to, ze ten text vyjimky, ktery se tam snazis nacpat, se ti vzdycky prelozi spatne a ten odkaz se ti bude bude zobrazovat jako escapovany text. Jediny reseni by potom bylo vypnout escapovani ty message v sablone, coz je fuj. Tohle je asi jediny validni zpusob, jak toho dosahnout. Alespon tedy co vim ja.
Zobrazeno 6 zpráv z 6.