Problém s přihlášením při přesunu na jinou stránku
- Sharmlock
- Člen | 8
Zdravím,
když se přihlásím a přejdu na jinou stránku, automaticky mě to odhlásí. Používám vestavený autorizační systém nette. Přihlášení mi normálně funguje, ale jakmile jdu na jinou stránku, tak se identita prostě ztratí.
LoginPresenter.php:
<?php
namespace App\Presenters;
use Nette;
use Nette\Application\UI\Form;
final class LoginPresenter extends Nette\Application\UI\Presenter
{
private Nette\Database\Explorer $database;
public function __construct(Nette\Database\Explorer $database)
{
$this->database = $database;
}
protected function createComponentLoginForm(): Form
{
$form = new Form;
$form->addText('username', '')
->setRequired();
$form->addPassword('password', '')
->setRequired();
$form->addSubmit('login', 'Přihlásit se');
$form->onSuccess[] = [$this, 'loginFormSucceeded'];
return $form;
}
public function loginFormSucceeded(\stdClass $values): void
{
$user = $this->getUser();
try {
$user->login($values->username, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
$this->flashMessage('Uživatelské jméno nebo heslo je nesprávné');
}
}
public function renderOdhlaseni() {
$user = $this->getUser();
$user->logout();
$this->redirect("Schuzky:prehled");
}
}
MyAuthenticator.php:
<?php
use Nette\Security\SimpleIdentity;
class MyAuthenticator implements Nette\Security\Authenticator
{
private $database;
private $passwords;
public function __construct(
Nette\Database\Explorer $database,
Nette\Security\Passwords $passwords
) {
$this->database = $database;
$this->passwords = $passwords;
}
public function authenticate(string $username, string $password): SimpleIdentity
{
$row = $this->database->table('users')
->where('username', $username)
->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('User not found.');
}
if (!$this->passwords->verify($password, $row->password)) {
throw new Nette\Security\AuthenticationException('Invalid password.');
}
return new SimpleIdentity(
$row->id,
$row->opravneni,
['username' => $row->username]
);
}
}
prihlaseni.latte:
{block content}
<form n:name=loginForm class=form>
<label n:name=username><input n:name=username placeholder="Uživatelské jméno"></label><br>
<label n:name=password><input n:name=password placeholder="Heslo"></label><br>
<input n:name=login class="btn btn-default">
</form>
<div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>
{/block}
Nevíte co s tím je?
předem díky