Přesměrování přihlášeného uživatele po znovu zobrazení formuláře pro přihlášení

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

Zdravím,
mám klasický přihlašovací presenter jaký je v distribuci nette/examples

SignPresenter

Jde mi o to, že když se přihlásím a po přesměrování zadám opět adresu pro přihlášení tak se zase objeví formulář i když jsem přihlášen.

Pokusil jsem se tedy o něco takového

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

    //dump($this->user->isLoggedIn());

    if($this->user->isLoggedIn() == TRUE) {
        $this->redirect(':Admin:Dashboard:');
    }
}

což funguje, a když jsem přihlášený tak mě to rovnou hodí do administrace, ale problém je že když se chci odhlásit, tak se provede přesměrování, ale zůstávám nadále přihlášený v administraci.

Dokáže někdo poradit v čem je háček?

Editoval Zdeno1981 (30. 3. 2012 13:59)

Jan Endel
Člen | 1016
+
0
-

Ahoj, tvůj úsek kódu vypadá v pořádku, za předpokladu že ho máš v SignPresenteru. Jakým způsobem se odhlašuješ? Dělal jsi ještě nějaké úpravy ve vzorovém SignPresenteru než je tebou popsaný startup?

Zdeno1981
Člen | 114
+
0
-

Přiložím tedy přímo můj SignPresenter, v kterém jsem dodal tu část kódu kterou jsem zde uvedl:

<?php

namespace AdminModule;

use Nette\Application\UI,
    Nette\Security as NS;

class SignPresenter extends \BasePresenter {

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

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

        //dump($this->user->isLoggedIn());

        if ($this->user->isLoggedIn() == TRUE) {
            $this->redirect(':Admin:Dashboard:');
        }
    }

    /**
     * Formulář pro přihlášení uživatele
     * @return \Nette\Application\UI\Form
     */
    protected function createComponentSignInForm() {

        $form = new UI\Form;

        $form->addText('username', 'Jméno uživatele:')
                ->setRequired('Zdejte jméno uživatele.');

        $form->addPassword('password', 'Heslo:')
                ->setRequired('Zadejte heslo.');

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

        $form->onSuccess[] = callback($this, 'processForm');
        return $form;
    }


    /**
     * Zpracování formuláře
     * @param $form
     */
    public function processForm($form) {

        try {
            $values = $form->getValues();
            $this->user->login($values->username, $values->password);
            $this->restoreRequest($this->backlink);
            $this->redirect(':Admin:Dashboard:');

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

    // Odhlášení uživatele
    public function actionOut() {
        $this->getUser()->logout();
        $this->flashMessage('Byl/a jste odhlášen/a.');
        $this->redirect('in');
    }

}

je to identické až na tu část co jsem tam přidal a namespace, připadá mi to jako by se nestihla zrušit identita uživatele, a po odhlášení když dojde k redirectu na ten formulář se opět přesměruje do administrace a jsem pořád přihlašený…

ViPEr*CZ*
Člen | 814
+
0
-
if ($this->user->isLoggedIn() == TRUE) {
  $this->redirect(':Admin:Dashboard:');
}

Jestli se nepletu tak todle se provede ještě než to vleze sem actionOut() { … proto bych tam vypustil v podmínce tudle akci ještě.

if ($this->user->isLoggedIn() == TRUE && $this->getAction() != "out") {

https://doc.nette.org/…n/presenters#…

Editoval ViPEr*CZ* (30. 3. 2012 15:03)

Zdeno1981
Člen | 114
+
0
-

super, už to funguje jak má, díky moc za pomoc!