Problém s přihlášením při přesunu na jinou stránku

Sharmlock
Člen | 8
+
0
-

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

Sharmlock
Člen | 8
+
0
-

Na každé stránce mám pak v presenteru tohle:

protected function startup()
    {
        parent::startup();
        if (!$this->getUser()->isLoggedIn()) {
            $this->redirect('Login:prihlaseni');
        }
    }
Polki
Člen | 553
+
0
-

Máš nastavený validní session storage a nebo nemažeš si v prohlížeči cookies?

A máš authenticator zaregistrovaný v configu?

Editoval Polki (12. 12. 2021 1:57)