Nette\Application\AbortException při redirectu ve vytváření komponenty

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

Zdravím, vytvářím možnost reset hesla u aplikace přes link, který přijde do emailu. Chtěl bych tedy udělat přístup ke změně hesla jen pokud bude správný parametr link nebo pokud bude uživatel přihlášen. Mohl byste mi někdo pomoct?

Takto nějak bych si to představoval:

protected function createComponentChangePassForm()
{
        if($this->getParameter('link')){
                //Zde bude kontrola linku s databází a následně možnost reset hesla
        }
        else{
                if(!$this->getUser()->isLoggedIn()){
                        $this->redirect('in');
                }
                else{
                        return $this->changePassFactory->change(function () {
                                $this->flashMessage('Vaše heslo bylo <b>úspěšně změněno</b>', 'success');
                                $this->redirect('Homepage:default');
                        });
                }
        }
}
CZechBoY
Člen | 3608
+
0
-

Nějak tak? Asi nechápu na čem ses zasekl :-/

protected function createComponentChangePassForm()
{
        if($this->getParameter('link') || $this->getUser()->isLoggedIn()) {
			if ($this->someModel->checkResetLink($this->getParameter('link')) !== true) {
				$this->redirect('in');
			}

			return $this->changePassFactory->change(function () {
                $this->flashMessage('Vaše heslo bylo <b>úspěšně změněno</b>', 'success');
            	$this->redirect('Homepage:default');
            });
        }

		$this->redirect('in');
}
David Matějka
Moderator | 6445
+
+5
-

tu kontrolu a presmerovani nesmis provadet v createComponent*, ale v action* metode

CZechBoY
Člen | 3608
+
+1
-

jo, nebo v action metode vynutit pouziti komponenty pres

$this->getComponent('changePassForm', true);