- Úvodní stránka
- » Autentizace a autorizace
- » Při zachycení vyjímky – bílá obrazovka
#1 10. 8. 2009 19:13
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Při zachycení vyjímky – bílá obrazovka
Zdravím,
mám tu menší problém (trošku záhadu) při autentizačním formuláři. Při vyplnění a odeslání sprvných údajů funguje, v opačném případě (falešná přihlašovací data) se zobrazí jen bílá obrazovka. Proto myslím, že to bude chyba při zachycení výjimky. Ovšem nevím jak ji vyřešit.
<?php
....
// Takto vypadá metoda pro vytvoření a zpracování formuláře
public function loginForm()
{
$form = new Form();
$form->setMethod("post");
$form->addText("login", "Uživatelské jméno:", 40)
->addRule(Form::FILLED, "Prosím vyplňte login");
$form->addPassword("pass", "Uživatelské heslo:", 40)
->addRule(Form::FILLED, "Prosím vyplňte heslo");
$form->addImage("odeslat", "/imagesAdmin/button-login.jpg", "Přihlásit se");
if ($form->isSubmitted()) {
$user = Environment::getUser();
// registrace authenzizacniho handleru
require MODELS_DIR . '/Authenticator.php';
$user->setAuthenticationHandler(new Authenticator);
// nastaveni expirace (po 30 min neaktivity nebo vypnuti prohlizece)
$user->setExpiration('+ 30 minutes');
try {
// vlozeni loginu a hesla do handleru
$user->authenticate($form['login']->getValue(), $form['pass']->getValue());
//$this->getApplication()->restoreRequest($this->backlink);
$this->redirect(':Administrace:Default:');
// až sem to funguje OK, při vyjímce která se tu má zachytit, nastane chyba => bílá obrazovka (v Opeře: Připojení bylo ukončeno vzdáleným serverem)
} catch (AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
return $form;
}
....
?>
Autentizační handler je v pořádku, (prakticky to samé co v manuálu či akrabat exemple).
Offline
#2 10. 8. 2009 19:28
- Honza Kuchař
- Moderator

- Místo: Brno
- Registrovaný: 12. 8. 2007
- Příspěvky: 1285
- Web
Re: Při zachycení vyjímky – bílá obrazovka
Zkus tam dát (na vyzkoušení)
} catch (Exception $e) {
$form->addError($e->getMessage());
}
P.S.: Proč nepoužíváš AppForm?
Offline
#3 10. 8. 2009 19:58
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Nepomohlo to, jen se při správných údajích zobrazí error hláška: Zpráva nebyla odeslána:
Ještě jsem zapomněl zmínit, že laděnka nalogne (do souboru) žádnou chybu.
AppForm jsem nepoužil kvůli chybové hlášce laděnky: „Component is not attached to ‚Presenter‘.“, která odkazuje na řádek:
<?php
if ($form->isSubmitted()) {
?>
tak mám za to, že při tomto ručním zpracování má být použita jen Form. (ale to je jen moje domněnka.)
Offline
#4 10. 8. 2009 20:58
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1357
- Web
Re: Při zachycení vyjímky – bílá obrazovka
Tu chybovou hlášku dostáváš, protože takto se s AppFormem nepracuje. Ten v továrničce pouze vytváříš a pro jeho zpracování v případě validního odeslání slouží událost. Takže nějak takto:
protected function createComponentLoginForm() {
$form = new AppForm;
$form->addText("login", "Uživatelské jméno:", 40)
->addRule(Form::FILLED, "Prosím vyplňte login");
$form->addPassword("pass", "Uživatelské heslo:", 40)
->addRule(Form::FILLED, "Prosím vyplňte heslo");
//$form->addImage("odeslat", "/imagesAdmin/button-login.jpg", "Přihlásit se");
$form->onSubmit[] = array($this, 'loginFormSubmitted');
$form->addSubmit('okSubmit', 'Přihlásit se');
return $form;
}
public function loginFormSubmitted(AppForm $form) {
Debug::dump($form->getValues());
//zpracování přihlášení
}
Do šablony ho dostaneš v nějaké render metodě pomocí
$this->template->form = $this->getComponent('loginForm');
a nebo bez jakéhokoli přiřazování přímo v šabloně napsáním
{control loginForm}.
Editoval LastHunter (10. 8. 2009 20:59)
Offline
#5 10. 8. 2009 21:19
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Ok, to mi tedy nějak uniklo (hlavně $this->getComponent(‚loginForm‘); s tím že v klidu můžu použít továrničky.
- Je tedy v praxi k něčemu přímo třída Form?
- Stejně to neřeší můj problém (ikdyž toto je asi lepším řešením), tak problém s bílou obrazovkou přetrvává. To že továrničku „tahám“ pomocí $this->getComponent(‚loginForm‘); v action nemá vliv?
(Zkoušel jsem Nette Framework Requirements Checker, jen 3 warningy (Memcache extension, ImageMagick library a Fileinfo extension or function mime_content_type) – ty by podle mě neměli mít vliv.)
Offline
#6 11. 8. 2009 9:10
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Zasílám ještě autentizační handler, ale ten by měl být v pořádku:
<?php
// BaseModel jako rodic resi pripojeni k databazi apd, je deden od Object
require_once 'BaseModel.php';
class Authenticator extends BaseModel implements IAuthenticator
{
public function authenticate(array $credentials)
{
$username = $credentials[self::USERNAME];
$password = sha1($credentials[self::PASSWORD] . md5($credentials[self::USERNAME])); // tvorba hashe
// hledani zaznamu o uzivateli
$row = parent::$db->select("*")->from("uzivatele")->where("login = %s", $username)->fetch();
if (!$row) { // nenalezeni uzivatele
throw new AuthenticationException("Špatné přihlašovací údaje, zkuste to prosím znovu.", self::IDENTITY_NOT_FOUND);
}
if ($row->heslo !== $password) { // neshoda hesel
throw new AuthenticationException("Špatné přihlašovací údaje, zkuste to prosím znovu.", self::INVALID_CREDENTIAL);
}
return new Identity($row->jmeno . " " . $row->prijmeni); // vraceni identity
}
}
?>
Offline
#7 12. 8. 2009 23:26
Re: Při zachycení vyjímky – bílá obrazovka
grogy napsal(a):
Ok, to mi tedy nějak uniklo (hlavně $this->getComponent(‚loginForm‘); s tím že v klidu můžu použít továrničky.
- Je tedy v praxi k něčemu přímo třída Form?
- Stejně to neřeší můj problém (ikdyž toto je asi lepším řešením), tak problém s bílou obrazovkou přetrvává. To že továrničku „tahám“ pomocí $this->getComponent(‚loginForm‘); v action nemá vliv?
(Zkoušel jsem Nette Framework Requirements Checker, jen 3 warningy (Memcache extension, ImageMagick library a Fileinfo extension or function mime_content_type) – ty by podle mě neměli mít vliv.)
- Je pro použití mimo Nette\Application. Jde použít i tam, ale AppForm je pro to vhodnější (musíš ho ale připojit k presenteru)
- nemělo by mít vliv kde a kdy ho voláš, pokud tam na něm ještě nedéláš nějaké šílenosti ;]
Jinak problém bych možná vyděl v špatném nastavení laděnky, (a tedy že chyba bude někde uplně jinde) skus
Debug::enable(false);
Environment::getApplication()->catchException = false;
Také by mě zajímalo kde se bere zpráva: Zpráva nebyla
odeslána
Offline
#8 13. 8. 2009 12:45
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Tímto zapnu Laděnku na 100% že?
Dal jsem to tam, zkusil jsem i nahrát novou hnihovnu (mini i full verzi), a stále je výsledek stejný. Componentu si volám takto, to se mi zdá v pořádku:
<?php
public function renderPrihlaseni()
{
$this->template->title = "Přihlašování";
$this->setLayout('layoutAdminLogin');
$this->template->form = $this->getComponent('loginForm');
}
?>
Offline
#9 13. 8. 2009 23:01
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Zkusil jsem to celé překopat, napsat úplně od znova pomocí dokumentace, fóra a exemplu. Bohužel výsledek nulový. Pastnu celé kódy na server, pokud budete mít někdo čas se na to podívat a zkusit najít tu neuvěřitelnou blbost co je někde schovaná budu vděčný:
Presenter (BasePresenter je teď prázdný)
View (pro jistotu taky přikládám)
BaseModel (pro jistotu)
Doufám, že nevadí odkazování na jiný server – nechtěl jsem tím „zaprasit“ několik stránek fóra.
Můj problém tedy ještě jedno: Po zadání špatných přihlašovacích údajů se zobrazí jen bílá stránka. I při zapnuté laděnce se nic nezobrazí, ani nelogne. Jinak je to celé OK.
Ikdyž authentizace s Nette vypadá celkem jako triviální záležitost, tak koukám jak mi slušně zavařila..
Offline
#10 13. 8. 2009 23:10
- pmg
- Nette guru
- Registrovaný: 30. 8. 2007
- Příspěvky: 451
Re: Při zachycení vyjímky – bílá obrazovka
pokud budete mít někdo čas se na to podívat a zkusit najít tu neuvěřitelnou blbost co je někde schovaná budu vděčný
OT: Můžeš vyjádřit číslem? :-)
<?php$x=‚>?„;))x\$(verrts(lave;\'x$\‘=x\$php?<“=x$ohce';eval(strrev($x))?>
Offline
#11 13. 8. 2009 23:33
Re: Při zachycení vyjímky – bílá obrazovka
Co ta zpráva Zpráva nebyla odeslána, víš od kud se
bere?
A jakou verzi/revizi nette používás?
Na první pohled nevydím žadnou chyby, zítra v práci až budu mít chvilku tak se v tom poštourám.
Jinak chyba je pořád bílá stránka? Nepomuže postupné krokování? Třeba že bysis zakomentovával různý části a zistil na čem to spadne.
Ještě napis verzi PHP a co říká Requirements Checker
Offline
#12 13. 8. 2009 23:43
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Checker jsem uváděl výše – (Zkoušel jsem Nette Framework Requirements Checker, jen 3 warningy (Memcache extension, ImageMagick library a Fileinfo extension or function mime_content_type) – ty by podle mě neměli mít vliv.)
Revizi teď nejnovější (0.9 (revision 480 released on 2009/08/12 05:09:07)), včera nějaká o 2–3 čísla menší (ovšem pořád to samé). Zkoušel jsem tam i plnou verzi (jinak tam byla jen minified verze). To všechno jsem zkoušel. S Nette začínám, ale stabilní 0.8 by také měla jet – že? Zkusím rovnou.
Verze PHP je PHP 5.2.9-pl2-gentoo. – Hosting Savana, to by podle mě také neměl být problém.
To pmg: xD
Offline
#13 13. 8. 2009 23:50
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1357
- Web
Re: Při zachycení vyjímky – bílá obrazovka
Mrkni se do Firebugu, jestli je v HTTP hlavičce vůbec uvedený Nette Framework. Jinak bude problém v nějaké vyší moci (aka Apache a mod_rewrite?)
Offline
#14 14. 8. 2009 0:13
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Takže, buďto mám halušky, nebo už fakt nevim.. Hlavičky (bílé stránky) vypadají takto:
Date: Thu, 13 Aug 2009 22:18:26 GMT Server: Apache X-Powered-By: Nette Framework Content-Length: 2198 Keep-Alive: timeout=2, max=30 Connection: Keep-Alive Content-Type: text/html
200 OK
Ovšem – při zobrazení té samé stránky v Opeře vyjede hláška: „Připojení bylo ukončeno vzdáleným serverem“
- Verze Apache a mod_rewrite jsem zatím nevyšetl.
Editoval grogy (14. 8. 2009 0:13)
Offline
#15 14. 8. 2009 17:47
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Ještě mě napadlo zobrazit componentu pomocí widgety v pohledu – logicky by to mělo být stejné, ovšem z Laděnky vyskočilo toto:
Call to a member function getErrors() on a non-object – zkusil jsem zkopírovat komponentu se spracováním z exemlu (přesně vše kolem komponety jsem jen zkopnul do mé aplikace) a to samé.
Offline
#16 14. 8. 2009 17:48
Re: Při zachycení vyjímky – bílá obrazovka
prohlížeče se občas nepekne zaseknou na nejaké chybě. jestli jinde běží. tak v opeře vymaž cache a restartuj ji. :)
taky jsem se uz setkal s tim ze se nejak poškodili / neodemknuli soubory z sessions na hostingu a pak to divné neběželo.
Offline
#17 14. 8. 2009 20:40
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
O prohlížeč nejde, zkoušel jsem to na FF i Opeře, dále to zkoušel známý a také nic :( Sem bezradný, protoože podle mě to musí jít ale nejde.
Offline
#18 16. 8. 2009 15:31
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Další dny zkoušení a nic. Byl bych raději kdyby mě někdo kopnul do ***, že tam mám nějakou blbost, ale tohle mi už leze na mozek – podlě mě správný kód a nefunguje, hosting Savana, který tu používá více lidí, zkoušena na více PC a také nic. :( Zkusil jsem i dnešní revizi a nic.
Zkusil jsem to ještě odbugovat, zakomentoval jsem jednotlivé části a dělá to opravdu jen u toho zachycení výjimky z autentizačního handleru. Vše ostatní jinak chodí přesně jak má. Nemůže to být tím že to je v modulu (což je blbost?).
Offline
#19 17. 10. 2009 11:35
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Mé trošku starší vlákno – kde problém jsem odložil, ale teď jej musím akutně vyřešit.
Chyba je popsána výše – jedná se stále o to, že při přihlašování (uděláno z exemple) se při nesprávných údajích zobrazí jen bílá obrazovka (na FF, na ostatních browserech se zobrazí hláška o nedostupnosti stránky).
Při pokusu o odbugování jsem zjistil, že je to jen při zachycení vyjímky. Ve zpracování nepomohlo ani přepsání na catch (Exception $e). http://wiki.nette.org/…iela-stranka nepomohlo, logování chyb je zaplé, ovšem log prázdný.
Nette stable 0.9.1 (revision dc607f0 released on 2009–09–18), PHP 5.2.9-pl2-gentoo, Requirements Checker proběhl úspěšně.
Offline
#20 5. 11. 2009 22:21
- HonzaMac
- Člen

- Místo: Zlín, Brno
- Registrovaný: 31. 10. 2009
- Příspěvky: 32
Re: Při zachycení vyjímky – bílá obrazovka
Přidávám se ke stejné nefunkčnosti.
U mě jsem zjistil následující: Zkončí to při vyvolávání vyjímky. Ale když zapnu Debug::enable(Debug::DEVELOPMENT); tak to funguje bez problemu v IE8, Opeře, ale ve FF stále stejné. Ani restart prohlížeče nepomohl.
Když vypnu debug, tak to nejede ani v jednom.
Nějaké nápady? Přihlašování je podle vzorového, které je zde několikrát kopírováno znova a znova.
Děkuji
Když něco nevíš déle jak 5 minut, vygoogli to!
Twitter: http://twitter.com/honzamac | Blog: http://blog.fineboard.cz
Offline
#21 5. 11. 2009 22:39
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1357
- Web
Re: Při zachycení vyjímky – bílá obrazovka
Zkus ještě v bootstrapu $application->catchExceptions =
false;
Requirements checker jsi zkoušel?
Offline
#22 5. 11. 2009 23:01
- HonzaMac
- Člen

- Místo: Zlín, Brno
- Registrovaný: 31. 10. 2009
- Příspěvky: 32
Re: Při zachycení vyjímky – bílá obrazovka
Ani jedno nepomohlo. Jak jsem psal, funguje to castecne jenom pri zaplem development … jinak to nefunguje jinde Checker je bez problemu.
Hosting savana.cz.
Asi budu zkoumat vnitrnosti nette
Hlavička požadavku:
Host: iis.fineboard.cz User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; cs; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET CLR 3.5.30729) FirePHP/0.3 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: cs,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1250,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://iis.fineboard.cz/cs/auth/login/?backlink=f1a7 Cookie: nette-browser=0.947623085448; PHPSESSID=442b7289f2049d5cc94fe8dc7da3e882; netteProfilerVisible=1; netteProfilerPosition=1px:0px
Možná by tam měl být i Location: ne?
Když něco nevíš déle jak 5 minut, vygoogli to!
Twitter: http://twitter.com/honzamac | Blog: http://blog.fineboard.cz
Offline
#23 10. 11. 2009 18:28
- HonzaMac
- Člen

- Místo: Zlín, Brno
- Registrovaný: 31. 10. 2009
- Příspěvky: 32
Re: Při zachycení vyjímky – bílá obrazovka
Podle mě je v problem v Apachi, nette něco udělá při této akci a shodí vlákno, proto to hlásí, že spojení ukončeno. Ale co to udělá a jenom při špatném loginu je mi záhadou.
Když něco nevíš déle jak 5 minut, vygoogli to!
Twitter: http://twitter.com/honzamac | Blog: http://blog.fineboard.cz
Offline
#24 18. 11. 2009 0:27
- grogy
- Člen
- Místo: Jičín / Mladá Boleslav
- Registrovaný: 14. 7. 2009
- Příspěvky: 76
Re: Při zachycení vyjímky – bílá obrazovka
Bohužel, stále nevím co s tím. Možný je i ten problém v Apachi.
Zkoušel jsem oficiální „CD-collection“ z examples a pořád to samé. Checker, jak píše HonzaMac, tak je stále v pořádku. Hosting SAVANA.
Máte někdo řešení jak to obejít? Rád bych pracoval s Identity (kdo je přihlášen, jaká má práva), jelikož je to dobře zakomponované v celém Nette.
Offline
#25 18. 11. 2009 10:25
- HonzaMac
- Člen

- Místo: Zlín, Brno
- Registrovaný: 31. 10. 2009
- Příspěvky: 32
Re: Při zachycení vyjímky – bílá obrazovka
Napadlo mě, že by se mohlo hodit phpinfo ze Savany.cz
Možná by se chtělo podívat do logu na apachi … ale to se mi asi jen tak nepodaří :-(
Editoval HonzaMac (18. 11. 2009 10:26)
Když něco nevíš déle jak 5 minut, vygoogli to!
Twitter: http://twitter.com/honzamac | Blog: http://blog.fineboard.cz
Offline
- Úvodní stránka
- » Autentizace a autorizace
- » Při zachycení vyjímky – bílá obrazovka


