Sign komponenta vs problém s backlink

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

Zdravím Vás, předělal jsem si SignPresenter ze sandboxu do komponenty a mám takový problém, se kterým si nevím rady, nebo prostě něco přehlížím.

Komponenta:

class Sign extends BaseControl{

      /** @var User */
      private $user;



      public function __construct(User $user){
            $this->user = $user;
      }



      /**
	 * Sign-in form factory.
	 * @return Form
	 */
	public function createComponentSignInForm(){
		$form = new Form;
		$form->addText('email', 'Email:')
			->setRequired('Prosím zadejte svoji emailovou adresu.')
                        ->addRule(Form::EMAIL, 'Emailová adresa obashuje chybu.')
                        ->setType('email')
                        ->setAttribute('placeholder', 'jan@novak.cz');

		$form->addPassword('password', 'Heslo:')
			->setRequired('Prosím zadejte své heslo.')
                        ->setAttribute('placeholder', 'heslo');

		$form->addCheckbox('remember', 'Neodhlašovat');

                // stores backlink in hidden form value
                $form->addHidden('backlink', $this->presenter->getParameter('backlink'));

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

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



        public function signInFormSucceeded(Form $form){

		$values = $form->getValues();

		if ($values->remember) {
			$this->user->setExpiration('14 days', FALSE);
		} else {
			$this->user->setExpiration('20 minutes', TRUE);
		}

		try {
			$this->user->login($values->email, $values->password);

		} catch (\Nette\Security\AuthenticationException $e) {
			$form->addError($e->getMessage());
		}

                if($form->hasErrors()) return $form;

                $this->presenter->flashMessage('Přihlášení proběhlo úspěšně', 'info');

                // if backlink is stored, redirects to backlink
                if(isset($values->backlink)) $this->presenter->restoreRequest($values->backlink);

                // else redirects to homepage
		$this->presenter->redirect('homepage:default');
	}


        public function render(){
              //render
        }
}

BaseSecuredPresenter:

class BaseSecuredPresenter extends BasePresenter{

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

            // Redirects to Sign:in, if user is not logged in
            if (!$this->user->isLoggedIn()) {
                  if ($this->user->logoutReason === \Nette\Http\UserStorage::INACTIVITY) {
                      $this->flashMessage('Byli jste odhlášeni z důvodu 20ti minutoné neaktivity');
                  }
                  $this->redirect(':FrontEnd:Sign:in', array('backlink' => $this->storeRequest()));
            }
      }

Vše funguje dobře, takže když přistupuju k presenteru děděného od BaseSecuredPresenteru, tak mě to přesměruje na login. Pokud zadám jméno heslo, následuje redirect na stránku, na kterou jsem původně chtěl jít. Pak jsem si ale všiml, že někdy mě to po přihlášení přesměruje na homepage:default (resp. nesplní se podmínka if(isset($values->backlink)) $this->presenter->restoreRequest($values->backlink);) a pokračuje dál na redirect homepage:default

Pokud se odhlásím, kliknu na administraci (ext. BaseSecuredPresenter), jsem přesměrován na Sign:in. Pokud se znovu přihlásím pod stejným uživatelským účtem je vše v pořádku. Přesměruje mě to do administrace.

Pokud se odhlásím se, kliknu na administraci (ext. BaseSecuredPresenter), jsem přesměrován na Sign:in a pokud se přihlásím jako jiný uživatel podmínka se nesplní (asi – nebo je zatím něco hlouběji) a jsem po přihlášení přesměrován na Homepage:default. A to přestože mě po kliku na administraci přesměruje na stránku sign:in kde v odkazu opravdu je /prihlaseni/?backlink=95r6g.

Editoval thm (16. 7. 2014 17:09)

pupitooo
Člen | 10
+
0
-

Podařilo se ti nakonec tento problém vyřešit? Trápí mě to samé a nevím, kde hledat nápravu.

newPOPE
Člen | 648
+
+1
-

Neblbne Vam tam session expiration vid https://api.nette.org/…ter.php.html#… Default je na 10min.

thm
Člen | 147
+
0
-

@pupitooo Bohužel nevím. Myslím, že jsem to nakonec vzdal.
@newPOPE Pokud by mělo jít o to, že request uložený v session během 10 minut vyprší, tak tím to pravděpodobně nebylo, protože jsem to určitě zkoušel odhlašovat/přihlašovat během chvíle.

Až bude čas, vyzkouším to na čistém sandboxu.

Ja
Člen | 260
+
0
-

stejny problem zde, podarilo se nekomu vyresit?

CZechBoY
Člen | 3608
+
0
-

Já jsem si vykradl request ze session a kontroloval jestli tam něco je.