„Zapominani“ udaju o uzivateli po redirectu

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

Zatimco na localhostu jsem s timto nemel problem, na ostrem serveru se mi nedari uspesne prihlasit, protoze autentizace sice uspesne probehne, vrati identitu… ale ta je ihned po redirectu zahozena a situace je stejna, jako kdyby vyprsela expirace.

Login handler:

<?php
	public function loginClicked(SubmitButton $button)
	{
		$credentials = $_POST;
		$user = Environment::getUser();
		$user->setAuthenticationHandler(new Auth);

		try {
			$user->authenticate($credentials['username'], $credentials['password']);
			$this->redirect('Admin:admin');
		}
		catch (AuthenticationException $e)
		{
			$this->failed = $e->getMessage();
			$this->redirect('Admin:default');
		}
	}
?>

…a cil redirectu:

<?php
public function renderAdmin()
	{
		$user = Environment::getUser();

		if ($user->isAuthenticated())
		{...
?>

A v tuto chvili vraci &user->isAuthenticated() zjevne false, protoze podminka skoci na else a prihlaseni neprobehne.

Jeste pro srovnani promenna $user hned po autentizaci v login handleru:

object(User) (8) ▼ {
„guestRole“ ⇒ string(5) „guest“
„authenticatedRole“ ⇒ string(13) „authenticated“
„onAuthenticated“ ⇒ NULL
„onSignedOut“ ⇒ NULL
„authenticationHandler“ private ⇒ object(Auth) (0) {}
„authorizationHandler“ private ⇒ NULL
„namespace“ private ⇒ string(0) ""
„session“ private ⇒ object(SessionNamespace) (3) ▼ {
„data“ private ⇒ array(4) ▼ {
„authenticated“ ⇒ bool(TRUE)
„identity“ ⇒ object(Identity) (3) {

}
„reason“ ⇒ NULL
„authTime“ ⇒ int(1250646473)
}
„meta“ private ⇒ NULL
„warnOnUndefined“ ⇒ bool(FALSE)
 }
}

…a po redirectu:

object(User) (8) ▼ {
„guestRole“ ⇒ string(5) „guest“
„authenticatedRole“ ⇒ string(13) „authenticated“
„onAuthenticated“ ⇒ NULL
„onSignedOut“ ⇒ NULL
„authenticationHandler“ private ⇒ NULL
„authorizationHandler“ private ⇒ NULL
„namespace“ private ⇒ string(0) ""
„session“ private ⇒ NULL
}

Co je spatne? Uz vazne nevim, co prehlizim…

PetrP
Člen | 587
+
0
-

Jestli se ti problém objevuje v IE (asi všechnu verze) tak vyskoušej to samé třeba ve firefoxu. Jestli to ve FF pojede tak je problém v tom že při nechterých „subrequestech“ IE odesílá jiný user-agent, nebo accept-language. A Session::generateVerificationKey() ti vyčistí session (tedy i přihlášení)

Můžeš bud změnit z čeho se generuje ta ochrana (to není nejlepší z bezpečnostního hlediska) nebo objevit co v IE způsubí ten request.

Pokuď vím tak to způsoboval Ajax (asi jen IE8) Flash který otevíral vnitřně nějakou stránku, a včera jsem se setkal i s tím že se IE snažil otevřít *.HTC soubor který neexistoval, a spadlo to na 404 applikace.

Tak jako tak na to můžeš zjistit třeba tak že si sem přidáš třeba toto:

file_put_contents(WWW_DIR.'/slog.txt','error '.serialize($_SERVER).chr(10),FILE_APPEND);

Z toho pak třeba vyčteš co to způsobý (tedy jestli je to tento problem).

Napiš jak si dopadl.

saasa
Člen | 2
+
0
-

Privedl jste me na myslenku zkusit i jine prohlizece (ja vim, nic sloziteho, ale nepodeziral jsem z teto chyby Firefox) a co se nestalo… funguje to vsude krome Firefoxu (verze 3.5.2). IE8, Chrome 3 i Opera 10 jsou v pohode.

Dela snad FF neco, co se s Nette autentizaci nesnese?

David Grudl
Nette Core | 8157
+
0
-

Možné to je, ale chce to zjistit co přesně. To znamená ověřit, jestli se nemění hlavičky HTTP požadavku, jestli je cookie správně uložena (cesta, doména). K tomu by měl pomoci Firebug.