#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.

  1. Je tedy v praxi k něčemu přímo třída Form?
  2. 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

PetrP
Moderator
Místo: Praha
Registrovaný: 15. 7. 2008
Příspěvky: 610
Web

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.

  1. Je tedy v praxi k něčemu přímo třída Form?
  2. 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.)

  1. 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)
  2. 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ý:

Bootstrap.php

Presenter (BasePresenter je teď prázdný)

View (pro jistotu taky přikládám)

Authentizační handler

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

PetrP
Moderator
Místo: Praha
Registrovaný: 15. 7. 2008
Příspěvky: 610
Web

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

PetrP
Moderator
Místo: Praha
Registrovaný: 15. 7. 2008
Příspěvky: 610
Web

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

 

Zápatí