seExpiration u login nefunguje
- Damo
- Člen | 56
Ahoj,
nastavená setExpiration u uživatele mi nefunguje, bere mi to tu vyšší nastavenou v neon
v neon 12 hodin
$user->setExpiration("30 minutes");
v setExpiration mam 30 minut,
ale když vypnu browser, PC, a vratím se za hodinu na web, tak jsem porad prihlasen.
Co může být špatně?
- Marek Bartoš
- Nette Blogger | 1280
Expirace v neonu přidává call setExpiration()
do vytvoření
služby User. Takže pokaždé, když se vytvoří služba, expirace se ti
přepíše.
Asi by se to dalo řešit tak, aby Nette setExpiration()
call
vložilo do callbacku onLoggedIn
.
Případně expiraci v konfiguraci extension nepoužívej a přidej si vlastní
config s časem expirace, který použiješ při přihlášení.
Editoval Marek Bartoš (24. 6. 2022 10:30)
- Marek Bartoš
- Nette Blogger | 1280
Ten callback by muselo používat Nette, ne ty. Aby nastavovalo expiraci jen při přihlášení a ty jsi ji mohl přetížit ve svém kódu po přihlášení. Teď Nette expiraci nastavuje pokaždé, když se vytvoří služba User, tedy při každém requestu.
Že by se ti onLoggedIn callback nevolal vůbec je divné. Buď jsi se přehlédl nebo jsi ho nepřidal před zavoláním login()
Editoval Marek Bartoš (24. 6. 2022 11:45)
- David Grudl
- Nette Core | 8239
Marek Bartoš napsal(a):
Expirace v neonu přidává call
setExpiration()
do vytvoření služby User.
Ne, nic takového se neděje.
@Damo setExpiration() je potřeba zavolat společně s login()
- Damo
- Člen | 56
David Grudl napsal(a):
Marek Bartoš napsal(a):
Expirace v neonu přidává call
setExpiration()
do vytvoření služby User.Ne, nic takového se neděje.
@Damo setExpiration() je potřeba zavolat společně s login()
Právě tak jsem to měl a nefungovalo
takto:
$user->setExpiration("30 minutes");
$user->login($login, $password);
po uprave na toto, už to funguje
$user->onLoggedIn[] = function() use ($user) {
$user->setExpiration("30 minutes");
};
$user->login($login, $password);
- David Grudl
- Nette Core | 8239
Marek Bartoš napsal(a):
@DavidGrudl https://github.com/…xtension.php#…
Máš recht, je to tam … a chová se to špatně, opravím :-)
- Marek Bartoš
- Nette Blogger | 1280
Vysvětlím raději kódem.
@Damo Expiraci je třeba nastavit po přihlášení, ne před ním. Tím že jsi expiraci přesunul do eventu onLoggedIn, tak se volá po přihlášení. Bez eventu bys tedy napsal toto:
$user->login($login, $password);
$user->setExpiration("30 minutes");
Ten event sám o sobě je důležitý pouze na straně Nette. Když nastavíš toto:
security:
authentication:
expiration: 1 hour
tak se teď vygeneruje:
$service = new Nette\Security\User();
$service->setExpiration('1 hour');
Takže se tvá expirace při každém request přenastaví. Aby se tak nedělo a nastavení v neonu respektovalo, co voláš ve vlastním kódu, tak by Nette muselo generovat toto:
$service = new Nette\Security\User();
$service->onLoggedIn[] = function() use($service) {
$service->setExpiration('1 hour');
}
- David Grudl
- Nette Core | 8239
Můžete zkusit @dev verzi, mělo by to fungovat už správně bez obezliček přes onLoggedIn.
Btw setExpiration() by mělo být volané před login()