Při jakékoliv Exception mě aplikace odhlásí

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MelkorNemesis
Člen | 36
+
0
-

Ahoj,

řeším zajímavý problém a absolutně netuším, čím by to mohlo být.
Jsem přihlášený v aplikaci a jsem stále přihlášený, skrz všechny requesty a stránky. Ale pokud na mě vyskočí jakákoliv exception (pro priklad BadRequestException, DibiException, DibiDriverException), tak mě aplikace vždy odhlásí. Je to docela otravné, zvlášť když programuju sekci, kde je potřeba přihlášení.

prihlaseni z loginu:

<?php

try {
            // pokusíme se přihlásit uživatele...
	    $this->presenter->user->setAuthenticator($this->presenter->context->frontAuthenticator);
	    $this->presenter->user->login($username, $password);
	    // ...a v případě úspěchu presměrujeme na další stránku
            $this->presenter->application->restoreRequest($this->presenter->backlink());

	    $this->presenter->flashMessage('Login was successfull.','success');

            $this->presenter->redirect('Homepage:');

} catch (\Nette\Security\AuthenticationException $e) {
            $this->presenter->flashMessage('Login error: ' . $e->getMessage(), 'error');
}
?>

BasePresenter.php pro frontend

<?php


<?php

namespace FrontModule;

abstract class BasePresenter extends \BasePresenter
{

	public function startup()
	{
	    parent::startup();

	    # set user namespace
	    $this->user->setNamespace('front');
	}

	public function createComponentLoginForm()
	{
		return new \Forms\Front\Login($this, 'loginForm');
	}


	public function handleLogout()
	{
	    $this->user->logout(true);
	    $this->flashMessage('Logout was successfull', 'success');
	    $this->redirect('this');
	}

}
?>

\BasePresenter.php obsahuje jen jednu metodu, ktera na nic nema vliv

Nemate nekdo napad, cim by to mohlo byt?

Diky

Editoval MelkorNemesis (3. 8. 2011 13:26)

pavelmlejnek
Člen | 16
+
0
-

Taky mám tento problém. Momentálně při vývoji to moc neřeším, i když příjemné to není. Pokud někdo ozřejmí příčinu, budu jen rád :)

edit: doplním, že se tak děje jak na localhostu, tak na hostingu (savana)

Editoval pavelmlejnek (6. 8. 2011 10:55)

David Grudl
Nette Core | 8171
+
0
-

Změní se nějak obsah session nebo session id v cookie?

pavelmlejnek
Člen | 16
+
0
-

Ne, zůstane nezměněné

Peppy
Člen | 137
+
0
-

+1
To isté u mňa, cookies sú fuč.

Vyki
Člen | 388
+
0
-

Také mi to dělalo, ale je to již delší dobu. Nyní s poslední verzí Nette je to v pohodě.

22
Člen | 1478
+
0
-

Nejlepší by bylo takový projekt někam zabalený (nejlépe jen osekaný na minimum…chybující presenter) hodit, aby se to dalo prozkoumat.

pavelmlejnek
Člen | 16
+
0
-

Takže trošku jsem zkoušel experimentovat. Vzal jsem sandbox a osekal ho na naprosté minimum.

přihlašovací metoda

public function authenticate(array $credentials)
{
    return new \Nette\Security\Identity("jmeno");
}

a vše ostatní v podobném duchu.

V tomto případě mě aplikace po vyjímce neodhlásila (BadRequestException).

Vše testováno na poslední verzi Nette.

edit: v minified verzi problém zmizí a aplikace neodhlašuje

Editoval pavelmlejnek (7. 8. 2011 20:24)

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

měl (mám) jsem stejný problém. Vzniklo to po přechodu na Nette 2Beta a hlavní příčinou bylo, že jsem používal ve své aplikaci vlastní proměnnou $user definovanou v BasePresenter, která se nejspíš prala s $this->getUser(). Po odstranění své proměnné $user a přepsání kódu na $this->getUser() se můj problém z 80% – 90% vyřešil, ale pořád ve zbylých 10% – 20% procent mě to při chybě odhlásí. Jak už bylo řečeno, během programování zabezpečené sekce je to hodně otravné, ale je to pořád lepší, než to bylo na úplném začátku po přechodu na Nette 2Beta.

Bernard

MelkorNemesis
Člen | 36
+
0
-

Tak jsem stahl z gitu nejnovejsi verzi nette a tam uz je vse vporadku.

MelkorNemesis
Člen | 36
+
0
-

MelkorNemesis napsal(a):

Tak jsem stahl z gitu nejnovejsi verzi nette a tam uz je vse vporadku.

Tak omyl, pri dost pripadech to dela porad, ale uz to neni tak caste.

22
Člen | 1478
+
0
-

22 napsal(a):

Nejlepší by bylo takový projekt někam zabalený (nejlépe jen osekaný na minimum…chybující presenter) hodit, aby se to dalo prozkoumat.