Přesměrování po přihlášení – store request
- Muhahe
- Člen | 79
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)
- Muhahe
- Člen | 79
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/