Prihlasovanie problem s presmerovanim

cujan
Člen | 410
+
0
-

Caute snazim sa spojazdnit prihlasovanie podla Quickstartu, do BasePresenteru som vlozil tento kod

<?php
public function startup() {
	parent::startup();
	if(!$this->user->isLoggedIn()){
	    $this->redirect("Sign:in");
	}

	$this->template->identity = $this->user->getIdentity();

    }
?>

a pri nacitani akejkolvek stranky mi hodi chybu

Táto stránka nefunguje
Web localhost vás presmeroval príliš veľakrát.
Skúste vymazať súbory cookie.
ERR_TOO_MANY_REDIRECTS

GEpic
Člen | 566
+
+3
-

Udělal si si smyčku. Jelikož tvůj Sign presenter dědí taktéž od tohoto BasePresenteru, tak to znamená že po přesměrování na Sign presenter se spustí i tento kód z BasePresenteru, a pokud není uživatel přihlášený, dojde k opětovnému přesměrování na ten samý presenter… No a to se děje tak dlouho, dokud to nevytuhne.

Kde si to v Quickstartu našel?

Šaman
Člen | 2659
+
+1
-

Musíš mít presenter, který nedědí od BasePresenteru a který typicky řeší jen přihlášení. A na něj přesměrovávat.
Je to výhodné i v tom, že většinou máš jiný layout přihlašovací obrazovky a jiný když jsi přihlášený (menu, odkaz na odhlášení apod.)

cujan
Člen | 410
+
0
-

Je pravda, ze v QuickStartu som nasiel, ze to vkladaju do kazdeho presenteru zvlast…a myslel som si, ze si to vylepsim, aby som to nemusel vkladat do kazdeho presenteru, tak som to hodil do Base…

GEpic napsal(a):

Udělal si si smyčku. Jelikož tvůj Sign presenter dědí taktéž od tohoto BasePresenteru, tak to znamená že po přesměrování na Sign presenter se spustí i tento kód z BasePresenteru, a pokud není uživatel přihlášený, dojde k opětovnému přesměrování na ten samý presenter… No a to se děje tak dlouho, dokud to nevytuhne.

Kde si to v Quickstartu našel?

cujan
Člen | 410
+
0
-

a ak zabezpecim, aby SignPresenter nededil od BasePresenter?

Šaman napsal(a):

Musíš mít presenter, který nedědí od BasePresenteru a který typicky řeší jen přihlášení. A na něj přesměrovávat.
Je to výhodné i v tom, že většinou máš jiný layout přihlašovací obrazovky a jiný když jsi přihlášený (menu, odkaz na odhlášení apod.)

Lukes
Silver Partner | 68
+
+1
-
<?php
public function startup() {
    parent::startup();
    if(!$this->user->isLoggedIn() && $this->name !== 'Sign'){
        $this->redirect("Sign:in");
    }

    $this->template->identity = $this->user->getIdentity();

    }
?>

Nebo si udělej výjimku na SignPresenter.

MajklNajt
Člen | 494
+
+1
-

cujan napsal(a):

a ak zabezpecim, aby SignPresenter nededil od BasePresenter?

Šaman napsal(a):

Musíš mít presenter, který nedědí od BasePresenteru a který typicky řeší jen přihlášení. A na něj přesměrovávat.
Je to výhodné i v tom, že většinou máš jiný layout přihlašovací obrazovky a jiný když jsi přihlášený (menu, odkaz na odhlášení apod.)

jednoducho:

class SignPresenter extends Nette\Application\UI\Presenter
{
}

class SecuredPresenter extends BasePresenter
{
}

class DalsiPresenter extends BasePresenter
{
}

class EsteDalsiPresenter extends BasePresenter
{
}

Editoval MajklNajt (22. 10. 2018 9:46)

GEpic
Člen | 566
+
+3
-

@Šaman přesně jak říkáš – udělal bych si AuthenticatedPresenter, kde bych měl ve startup zmíněnou podmínku a všechny stránky, na kterých musí být uživatel přihlášený, by z něj dědili.

Tzn:

class BasePresenter extends Nette\Application\UI\Presenter
{
}

class AuthenticatedPresenter extends BasePresenter
{
	public function startup()
	{
		parent::startup();
		if(!$this->user->isLoggedIn()) {
        	$this->redirect("Sign:in");
    	}
	}
}

class AdminPresenter extends AuthenticatedPresenter // potrebujem prihlaseneho uzivatele
{

}

class ManagePresenter extends AuthenticatedPresenter // taktez
{

}

class SignPresenter extends BasePresenter // zde nepotrebujem prihlaseneho uzivatele
{

}
rom%lax%
Člen | 3
+
+1
-

Jak říká @GEpic . To funguje fajn.