„Zapominani“ udaju o uzivateli po redirectu
- saasa
- Člen | 2
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
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.
- David Grudl
- Nette Core | 8218
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.