Přesměrování z modulu na login a zpět do modulu

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

Dobrý den,

prosím Vás můžete mi pomoct s přesměrováním na předchozí stránku?
Mám několik modulů, ve kterých je odkaz na přihlašovací form.

<?php

namespace App\Presenters;

use Nette\Application\UI\Form;

class UserPresenter extends BasePresenter {

/** @var \App\Model\UserManager @inject */
    public $userManager;

/** @persistent */
    public $backlink = '';

protected function createComponentLogInForm() {
        $form = new Form;

        $form->addText('email', 'Email:')
                ->setRequired('Vyplňtě email!');
        $form->addPassword('password', 'Heslo:')
                ->setRequired('Vyplňte heslo!');

        $form->addSubmit('log_in', 'Přihlásit se');

        $form->onSuccess[] = [$this, 'logInFormSucceeded'];

        return $form;
    }

    public function logInFormSucceeded($form, $values) {
        $this->user->login($values->email, $values->password);
        $this->user->setExpiration(0, TRUE);
        $this->flashMessage('Jste přihlášen');
        $this->restoreRequest($this->backlink);
        //$this->redirect('Homepage:');
    }
?>

Po přihlášení potřebuji uživatele vrátit do modulu, ve kterém se chtěl přihlásit.

Zde je akce v modulu:

public function actoinLogIn(){
        $this->redirect(':User:logIn', ['backlink' => $this->storeRequest()]);
    }

a odkaz v layoutu modulu:

<a n:href=":Modul:User:logIn">Přihlásit se</a>

Bohužel po přihlášení mi to přesměruje na ten samý přihlašovací form.

Vůbec nevím co s tím, jak to zprovoznit. Nejspíše asi špatně chápu jak funguje restore/storeRequest(). Pokud jsem v modulu a kliknu na odkaz, tak do backlinku se uloží následující HTTP request (odkaz na přihl. form.) – po přihlášení to projede uložené requesty, tam je ale odkaz na přihl. form., tedy mě to ani nemůže přesměrovat zpět do modulu, což se i takhle děje. Tím pádem, ale vůbec nevím jak to vyřešit, aby to uživatele přesměrovalo zpět do modulu. Nemáte nějaké nápady?

Předem moc děkuji.

newPOPE
Člen | 648
+
+1
-

Ono je zrejme preco ta to presmeruje na opat na login lebo tu akciu actionLogIn vlastne storujes do backlink parametra. storeRequest storne aktualny request co je v tvojom pripade :Modul:User:logIn:.

Ten backlink parameter je potrebne generovat este pred samotnym presmerovanim na prihlasenie cize pri kazdom requeste pokial je user neprihlaseny.

loser
Člen | 6
+
0
-

Děkuji.

Tak jsem přidal v modulu do BasePresenteru:

public function startup() {
        parent::startup();
        $this->template->acctualRequest = $this->storeRequest();
    }

odkaz vypadá takhle:

<a n:href=":Modul:User:logIn $acctualRequest">Přihlásit se</a>

A funguje to, po přihlášení mě to přesměruje zpět do daného modulu.

Nebude to mít nějaký negativní vliv na výkon či paměť? Když vezmu v potaz, že přihlašovat se bude jenom redaktor dejme tomu jednou za měsíc max, kdežto uživatel se přihlašovat vůbec nebude, ale i tak se tudíž bude při každé nově načtené view pořád vytvářet nové sessions(myslím to spíše u nějaké větší appky, kde bude podstatně vyšší návštěvnost).

Ale mám ještě problém při odhlašování, kde to přesměrování nefunguje respektive backlink je dle mého názoru prázdné.
Odkaz na odhlášení v layoutu u modulu:

<a n:href=":Modul:User:logOut $acctualRequest">Odhlásit se</a>

Action v modulu:

public function actionLogOut($acctualRequest = NULL) {
        if ($acctualRequest !== NULL) {
            $this->redirect(':User:logOut', ['backlink' => $acctualRequest]);
        }
    }

Odhlašovací proces v centrálním UserPresenteru(kde je i onen přihl. form.):

public function actionLogOut(){
        $this->user->logout(TRUE);
        $this->flashMessage('Byl jste odhlášen');
        $this->restoreRequest($this->backlink);
        $this->redirect('Homepage:'); //4. řádek
    }

Nevíte proč mě to nepřesměruje zpět? Když zakomentuji 4. řádek u actionLogOut, tak mi laděnka vyhubuje, že neexistuje šablona logout, z čehož tedy usuzuji, že backlink je prázdný?

newPOPE
Člen | 648
+
0
-

Predpokladam, ze problem bude tu $this->restoreRequest($this->backlink);. Pokial nemas $this->backlink persistentny alebo ho nejako nenaplnas tak tam bude null cize restoreRequest nic neurobi.

V action modulu presmerovavas na $this->redirect(':User:logOut', ['backlink' => $acctualRequest]); no v UserPresenteri uz ho nikde nepouzivas.

Videl by som to nejak takto:

public function actionLogOut($backlink = null){
	// ...
        $this->restoreRequest($backlink);
    // ...
}