Přesměrování z modulu na login a zpět do modulu
- loser
- Člen | 6
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
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
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
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);
// ...
}