Přesměrování po přihlášení – store request

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

Zdravím, řeším aplikaci, která je přístupná až po přihlášení uživatele. Potřebuji také realizovat možnost přístupu k určitým částem odkazem (např link v emailu).
Situace: nepřihlášený uživatel klikne na odkaz → vyskočí přihlašování → po úspěšném přihlášení je přesměrován na daný odkaz

Vycházel jsem z tohoto návodu https://doc.nette.org/…tore-request

BasePresenter – prozatím prázdný, vše ostatní z něho vychází

<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter {

}
?>

BaseSecurePresenter – dědí z BasePresenteru a obsahuje kontrolu přihlášení. Ostatní presentery od něho dědí (vyjma signPresenteru)

<?php
abstract class BaseSecurePresenter extends BasePresenter {

    protected function startup() {
        parent::startup();

        if(!$this->getUser()->isLoggedIn()){

            $this->redirect('Sign:in', array('backlink' => $this->storeRequest()));

        }
    }

}
?>

SignPresenter – přihlašování, dědí od BasePresenteru

<?php
class SignPresenter extends BasePresenter
{

        public $backlink = '';
	/**
	 * Sign-in form factory.
	 * @return Nette\Application\UI\Form
	 */
	protected function createComponentSignInForm()
	{
		$form = new UI\Form;
		$form->addText('username', 'Login:')
			->setRequired('Please enter your username.');

		$form->addPassword('password', 'Password:')
			->setRequired('Please enter your password.');



		$form->addSubmit('send', 'Sign in');

		// call method signInFormSucceeded() on success
		$form->onSuccess[] = $this->signInFormSucceeded;
		return $form;
	}



	public function signInFormSucceeded($form)
	{
		$values = $form->getValues();



		try {
			$this->getUser()->login($values->username, $values->password);
		} catch (Nette\Security\AuthenticationException $e) {
			$form->addError($e->getMessage());
			return;
		}

                $this->restoreRequest($this->backlink);
		$this->redirect('Homepage:');
	}



	public function actionOut()
	{
		$this->getUser()->logout();
		$this->flashMessage('You have been signed out.');
		$this->redirect('in');
	}

}
?>

Přihlašování funguje v pořádku, akorát se mi nedaří zprovoznit přesměrování pomocí restoreRequest.

Např: chci se přihlásit z www.example.com/www/tasks/ a jsem přesměrován na www.example.com/www/

Verze Nette 2.08

za každou radu budu moc vděčný

Editoval Muhahe (11. 9. 2013 14:19)

Oli
Člen | 1215
+
0
-

nezapomněl jsi na anotaci persistent?

/** @persistent */
public $backlink = '';
Muhahe
Člen | 79
+
0
-

Oli napsal(a):

nezapomněl jsi na anotaci persistent?

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

Nojo to bylo ono! Sem myslel že je to jen komentář. Moc děkuju, už si pouštim http://piv.pivpiv.dk/

Aurielle
Člen | 1281
+
0
-

Anotace mají celkem velký význam, ještě větší třeba v Doctrine, být tebou nastuduji si je :)