nečekané chovaní při přihlašení
- vlkodlak
- Člen | 175
narazil jsem na tento efekt s přihlašováním, ale nedává mi to smysl proč
mám standartní formulář pro přihlášení:
<?php
declare(strict_types=1);
namespace App\Forms;
use Nette;
use Nette\Application\UI\Form;
use Nette\Security\User;
final class SignInFormFactory
{
use Nette\SmartObject;
/** @var FormFactory */
private $factory;
/** @var User */
private $user;
public function __construct(FormFactory $factory, User $user)
{
$this->factory = $factory;
$this->user = $user;
}
public function create(callable $onSuccess): Form
{
$form = $this->factory->create();
$form->addText('username', 'Username:')
->setHtmlAttribute('class', 'bigNumbers')
->setRequired('Please enter your username.');
$form->addPassword('password', 'Password:')
->setRequired('Please enter your password.');
$form->addCheckbox('remember', 'Keep me signed in');
$form->addSubmit('send', 'Sign in');
$form->onSuccess[] = function (Form $form, \stdClass $values) use ($onSuccess): void {
try {
$this->user->setExpiration($values->remember ? '14 days' : '20 minutes');
$this->user->login($values->username, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
$form->addError('The username or password you entered is incorrect.');
return;
}
$onSuccess();
};
return $form;
}
}
v konfiguračním souboru
session:
expiration: 14 days
savePath: "%tempDir%/sessions"
autoStart: true # výchozí hodnota je 'smart'
a když se přihlásím autorizace proběhne a pokračuje se dál, ale pokud z nenadaní zavřu okno a opět ho otevřu jsem stále přihlášeny, předpokládám je to kvůli těm to 20 minutám?
$this->user->setExpiration($values->remember ? '14 days' : '20 minutes');
no ale i když dam na stránce odhlásit, zavřu stránku, opět jí otevřu zjistím, že jsem stále přihlášený a tomu nerozumím, proč? kde to mohu upravit?
- David Grudl
- Nette Core | 8239
Otevírání a zavírání stránek by nemělo mít na nic vliv. Vlastně se ptáš, proč po odhlášení zůstaneš přihlášený, tak ukaž kód, kterým se odhlašuješ.
- vlkodlak
- Člen | 175
ten je také standartní bez úprav
public function actionOut(): void
{
$this->getUser()->logout();
}
EDIT:
v latte
<div class="col-md-10 col-md-offset-1">
<div class="infologin"><b>User:</b> {$infologin} :: <b><a n:href="Sign:out">Logout</a></b></div>
</div>
Editoval vlkodlak (31. 3. 2021 13:59)
- David Grudl
- Nette Core | 8239
A když na to klikneš, tak zůstáváš dál přihlášený? Opravdu se ten kód spustí?
- vlkodlak
- Člen | 175
David Grudl napsal(a):
A když na to klikneš, tak zůstáváš dál přihlášený? Opravdu se ten kód spustí?
je pravdou, že v testu panáček v ladence změní barvu ze zelené na šedou, což možná je to co mé mate a mylně předpokládám v odhlášení, ale s kurzorem vidím přihlášeného uživatele.
Prosím, jak tedy uživatele správně odhlásím nebo přeznějí, kterým směrem zaměřit mé pátraní?
- Ondřej Kubíček
- Člen | 494
podle mě se ti jen nesmazala identita, což tě asi zmátlo
uprav to na $this->getUser()->logout(true);