Přihlášení – throw new – nevyhazuj vyjímků

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

Zdravím.
Postupuji podle návodu Vytvořte si první aplikaci! – https://doc.nette.org/…thentication uživatelů

Ovšem při neexistujícím uživatelském jméně je vrácena chyba error 500 – Server Error a v logu od nette je:

Nette\Security\AuthenticationException #1
User ‚pokususer‘ not found.

Chyba je na řádku 38:

public function authenticate(array $credentials)
33:        {
34:            list($username, $password) = $credentials;
35:            $row = $this->users->where('nick', $username)->fetch();
36:
37:            if (!$row) {
38:                throw new NS\AuthenticationException("User '$username' not found.", self::IDENTITY_NOT_FOUND);
39:
40:            }
41:
42:            if ($row->password !== $this->calculateHash($password)) {

Jak to upravit tak aby, uživateli bylo sděleno, že zadal nesprávné jméno nebo heslo? Takhle vůbec uživatel neví co se děje.

Díky za info

Tomas Jancik
Člen | 103
+
0
-

pokud ti bude stacit pro oba pripady stejna hlaska, muzes to udelat treba takhle

public function authenticate(array $credentials)
        {
           list($username, $password) = $credentials;
           $row = $this->users->where('nick', $username)->fetch();

           if (!$row || $row->password !== $this->calculateHash($password)) {
		...
	   }
motorcb
Člen | 552
+
0
-

Ale co mam dat místo tech … ?

natrim
Člen | 73
+
0
-

trik je právě v tom presenteru, který onu vyjímku zachytí

stačí si přečíst celý postup

motorcb
Člen | 552
+
0
-

Ale proč se nevyhodí vyjímka???
$form->addError(‚Neplatné uživatelské jméno nebo heslo.‘);

public function signInFormSubmitted(Form $form)
{
    try {
        $user = $this->getUser();
        $values = $form->getValues();
        if ($values->persistent) {
            $user->setExpiration('+30 days', FALSE);
        }
        $user->login($values->username, $values->password);
        $this->flashMessage('Přihlášení bylo úspěšné.', 'success');
        $this->redirect('Homepage:');
    } catch (NS\AuthenticationException $e) {
        $form->addError('Neplatné uživatelské jméno nebo heslo.');
    }
}

ale rovnou chyba error 500 – Server Error ???

natrim
Člen | 73
+
0
-

a máš v tom presenteru na začátku?

use \Nette\Security as NS;

a správně zaregistrovaný authenticator v config.neon?
a vymazal si pak cache?

Editoval natrim (1. 6. 2012 14:49)

motorcb
Člen | 552
+
0
-
use \Nette\Security as NS;

Mi chybělo. Díky. Más u mne pivo :)

iNviNho
Člen | 352
+
0
-

kym som našiel kde je problém, veru potrápil som sa :D

motorcb napsal(a):

use \Nette\Security as NS;

Mi chybělo. Díky. Más u mne pivo :)