špatně zadané heslo – AuthenticationException

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

Zdravím, prosím o pomoc s použitím AuthenticationException

v metodě authenticate mám v případě špatně zadaného hesla:

return new Nette\Security\AuthenticationException('Špatně zadané jméno nebo heslo.');

a v sign presenteru:

public function auth_success(Nette\Application\UI\Form $form) {
	$values = $form->getValues();
	$user = $this->getUser();
    $user->setAuthenticator($this->authenticator);
   	try {
		$user->login($values->username, $values->password);
        $this->redirect("Overview:default");
    } catch (Nette\Security\AuthenticationException $e) {
    	$this->flashMessage($e->getMessage());
        $this->redirect('Sign:default');
    }
}

a na webu dostávám server error

Argument 1 passed to Nette\Http\UserStorage::setIdentity() must be an instance of Nette\Security\IIdentity, instance of Nette\Security\AuthenticationException given, called in /opt/lampp/htdocs/monitor/vendor/nette/security/src/Security/User.php on line 87 and defined

Jak to, že mi to nepropadne do bloku catch?

Martk
Člen | 661
+
+3
-

Nahraď to za.

throw new Nette\Security\AuthenticationException('Špatně zadané jméno nebo heslo.');

Exceptiony se nevrací, ale hází a potom, když chceš, tak se chytají.

Editoval Antik (7. 1. 2016 18:03)

kxm
Člen | 10
+
0
-

aha díky moc, tohle jsem přehlídnul

GEpic
Člen | 566
+
0
-

Proč nepoužiješ rovnou toto v presenteru?

$this->flashMessage("Špatně zadané jméno nebo heslo.");

Editoval GEpic (7. 1. 2016 19:32)

Aurielle
Člen | 1281
+
0
-

@GEpic: byť je tebou navrhované řešení bezpečnější (imho by se uživatelům nikdy neměly ukazovat texty výjimek), tak spousta lidí si právě hodí výjimku s vlastním textem a tu pak předá do flash zprávičky (a tím dokáže rozlišovat různé chyby).

GEpic
Člen | 566
+
0
-

Aurielle napsal(a):

@GEpic: byť je tebou navrhované řešení bezpečnější (imho by se uživatelům nikdy neměly ukazovat texty výjimek), tak spousta lidí si právě hodí výjimku s vlastním textem a tu pak předá do flash zprávičky (a tím dokáže rozlišovat různé chyby).

Ano, to jsem pochopil, šlo mi přímo o tento případ, kdy je chyba vlastně jasně daná a víme co se stane. Kdyby to byla jiná funkce, kde nevíme jaké vyjímky mohou naskytnout, pak je určitě dobré je odchytávat jinak, např v případě jakékoliv jiné exception uživateli flashnout „nastala chyba“ a chybu si pak lognout. :)

Editoval GEpic (7. 1. 2016 20:10)