Nefunguje přihlášení – Identity nepřežije obnovení stránky
- kucix
- Člen | 33
Zdravím,
mám problém s přihlášením.
Na úvod – používám nejnovější verzi nette z gitu na php 5.3.8
Popis problému:
Ve formuláři /sign/in se přihlásím, je redirect na homepage:default, kde
v šabloně přes $user->isLoggedIn()
kontroluju, zda je
přihlášený, nebo ne.
<?php
{if $user->isLoggedIn()}
LOGGGED<br />
<a href="{link Sign:out}">Odhlášení</a>
{else}
NOT LOGGED<br />
<a href="{link Sign:in}">Přihlášení</a>
{/if}
?>
Při přihlášení a redirectu je uživatel přihlášený, ale při obnovení stránky třeba znovu zadáním v prohlížeči je uživatel najednou odhlášený …
Problém jsem vystopoval až k tomuto kousku kódu v session.php:
<?php
// process meta metadata
if (isset($nf['META'])) {
$now = time();
// expire section variables
foreach ($nf['META'] as $section => $metadata) {
if (is_array($metadata)) {
foreach ($metadata as $variable => $value) {
if ((!empty($value['B']) && $browserClosed) || (!empty($value['T']) && $now > $value['T']) // whenBrowserIsClosed || Time
|| ($variable !== '' && is_object($nf['DATA'][$section][$variable]) && (isset($value['V']) ? $value['V'] : NULL) // Version
!== Nette\Reflection\ClassType::from($nf['DATA'][$section][$variable])->getAnnotation('serializationVersion'))
) {
if ($variable === '') { // expire whole section
unset($nf['META'][$section], $nf['DATA'][$section]);
continue 2;
}
unset($nf['META'][$section][$variable], $nf['DATA'][$section][$variable]);
}
}
}
}
}
?>
kokrétně část podmínky:
(isset($value['V']) ? $value['V'] : NULL) !== Nette\Reflection\ClassType::from($nf['DATA'][$section][$variable])->getAnnotation('serializationVersion')
Narazil někdo na stejný problém?
Jak toto vyřešit?
SignPresenter je ze sandboxu
UsersModel je pro test zjednodušený:
<?php
public function authenticate(array $credentials) {
list($username, $password) = $credentials;
if( ($username == 'user') && ($password == 'user') ){
return new NS\Identity('1', 'admin', array('id'=>1, 'username'=>'user', 'name'=>'jmeno'));
} else {
throw new NS\AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL);
}
}
?>
PS: zkoušel jsem to na serveru, dvou VPS a na localhostu .. všude stejný výsledek …
Díky za pomoc
- Filip Procházka
- Moderator | 4668
Aktualizuj si Nette.
Tohle bude určitě nějaká hloupá chyba :) Zkus to na čistém sandboxu.
- Mikulas Dite
- Člen | 756
Zkontroloval bych session, jestli to třeba má nicotný expire nebo se resetuje při každém requestu, nebude to fungovat.
- kucix
- Člen | 33
expire je 30 minut, nebo 14 dní … každopádně by měla vydržet v řádu sekund/minut :-)
Ale je to ještě zajímavější …
Když mám Debugger::enable(Debugger::DEVELOPMENT);
tak to
dělá tyto vylomeniny
Ale když nastavím Debugger::enable(Debugger::PRODUCTION);
, tak
to najednou funguje a přihlášení si to udrží …
Jak může mít devel/production vliv na přihlášení?
Nemůžu si nastavit production, když chci teprve programovat stránky …
Já už nechápu nic :-D
Setkal se s tím někdo?
- Aearsis
- Člen | 57
Já se s tím setkal, ale bude to asi mimo kontext, a vlastně mi to fungovalo opačně. Používal sem k NotORM jako cache session, v pořádku to fungovalo na development, ale v production to mělo stejné následky jako u Tebe – jakákoli informace v session se nedožila dalšího requestu…