Argument passed … must be an instance of Nette\Security\IIdentity, boolean given (chybny login)

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

Ladenka mi vyhazuje chybu
Argument 1 passed to Nette\Http\User::setIdentity() must be an instance of Nette\Security\IIdentity, boolean given

Takhle vypada muj kod:

public function signInFormSubmitted($form) {
        try {
            $values = $form->getValues();
            $user = $this->getUser();
            if ($values->remember) {
                $user->setExpiration('+ 14 days', FALSE);
            } else {
                $user->setExpiration('+ 20 minutes', TRUE);
            }

            $user->login($values->username, $values->password);  //zde chyba
            $this->flashMessage('Byl jste přihlášen.');
            $this->redirect('Admin:');
        } catch (NS\AuthenticationException $e) {
            $form->addError($e->getMessage());
        }
    }

Co delam spatne? diky

bucrijos
Člen | 6
+
0
-

Jestli to máš mimo presenter, tak dej místo $this->getUser()$this->getPresenter()->getUser()

Editoval bucrijos (15. 12. 2011 20:21)

simPod
Člen | 383
+
0
-

mam to uvnitr presenteru. Zapomnel jsem dodat, ze se toto stava pouze pri chybnem loginu, pokud jsou udaje spravne, uzivatel se prihlasi

Fanda
Člen | 39
+
0
-

Nebude chyba spíš v authenticatoru? Metoda authenticate() musí vracet objekt implementující IIdentity (ne bool).

bojovyletoun
Člen | 667
+
0
-

přesně tak, vrací identity, jinak dává vyjímku, která se odchycuje v presenteru. Viz zde hledej catch.

Editoval bojovyletoun (15. 12. 2011 22:13)

simPod
Člen | 383
+
0
-

No ja zachytavam vyjimku viz cast kodu ve funkci po submit formulare:

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

ale ona se asi nezachyti a ja nevim proc: PHP Fatal error: Uncaught exception Nette\Security\AuthenticationException with message 'User not found.' in C:\wamp\www\juliska\app\models\UserModel.php

(zkusil jsem i zmenu na catch (Nette\Security\AuthenticationException $e) {, pac jsem zjistil, ze NS neni definovano, ale stejne…

bazo
Člen | 620
+
0
-

skus dat este jedno spatne lomitko pred vynimku do catch

simPod
Člen | 383
+
0
-

aha, uz to jde. Dekuji

v pocatku byla chyba, ze jsem authentication model vzal odnekud ze sandboxu a misto throw exception jsem mel return false