Autentizace – omezení přístupu nepřihlášeným

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
EL
Člen | 17
+
0
-

Zdravím, mám další dotaz spojený s logování uživatelnů.

Kam a v jaký podobě mám konkrétně umístit to, že pokud neni přihlášen, tak mi stránku zobrazí například presenter LoginFormPresenter s nějakou hláškou ideálně a pokud přihlášen je, tak může kamkoliv?

díky za odpovědi

grogy
Člen | 147
+
0
-

Vložil bych jej do BasePresenteru administrace (pokud se jedná o administaci, pokud ne, tak prostě do BasePresenteru, který pak dědíš pro další Presentery v systému, kam chceš zamezit přístup bez přihlášení.

Samotnou kontrolu do startupu, a s tím, že pokud je nepřihlášen, tak ho přesměruješ třeba na logování (tady modul Admin, presenter podle tebe, action prihlaseni).

abstract class BaseAdminPresenter extends BasePresenter
{
    protected function startup()
    {
        parent::startup();

        // overeni uzivatelu
        $user = Environment::getUser();
        if (!$user->isAuthenticated()) {
            $this->redirect(':Admin:LoginFormPresenter:prihlaseni');
        }
    }
}
EL
Člen | 17
+
0
-

tak přes to oěřování ve startupu se mi to cyklí, protože se pořád dokola přesměrovává na ten login

Ondřej Mirtes
Člen | 1536
+
0
-
abstract class BaseAdminPresenter extends BasePresenter
{
    protected function startup()
    {
        parent::startup();

        // overeni uzivatelu
        $user = Environment::getUser();
        if ($this->name != ":Admin:LoginFormPresenter" && !$user->isAuthenticated()) {
            $this->redirect(':Admin:LoginFormPresenter:prihlaseni');
        }
    }
}
EL
Člen | 17
+
0
-

tohle už funguje, díky

a ještě teda jak by bylo možný tam hodit nějakou hlášku po tom redirectu?

Ondřej Mirtes
Člen | 1536
+
0
-

před redirectem zavolej $this->flashMessage.

EL
Člen | 17
+
0
-

nějak to nic neudělalo

protected function startup()
	{
		parent::startup();
		$this->model = new Model;
		// overeni uzivatelu
    		$user = Environment::getUser();
   		if ($this->name != "LoginForm" && !$user->isAuthenticated()) {
      			$this->flashMessage('Nepovolený přístup! Nejdříve se musíte přihlásit.');
      			$this->redirect('LoginForm:');
    		}
	}
redhead
Člen | 1313
+
0
-

Budeš muset někde ty flashmessages vyrenderovat. Šablona dostává proměnnou $flashes (pole s flashmessage). Takže projet foreachem (ve $flash->message je zpráva kterou zadáš té metodě)

EL
Člen | 17
+
0
-

všechno ok, díky ;) jenom sem nevěděl, jak funguje flashMessage.

Dragonn
Člen | 12
+
0
-

Já bych se k tomuhle chtěl ještě na něco zeptat, login formulář mám v layoutu, takže nechci redirect ale potřebuju nějaké vstupní údaje do templatu. Kam to mám napsat když v BasePresenteru nemám žádný render?

_Martin_
Generous Backer | 679
+
0
-

Dragonn napsal(a):

Já bych se k tomuhle chtěl ještě na něco zeptat, …

Určitě by pomohla metoda beforeRender volaná v BasePresenteru.

David Grudl
Nette Core | 8147
+
0
-

Místo $this->name != "LoginForm" je vhodnější !($this instanceof LoginFormPresenter)