Nezachytí vyjímku a laděnka ji vypíše

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

Ahoj mám v BasePresenteru přihlašová uživatele, to přihlašení chci mít na keždé straně. asi takto

public function createComponentLoginForm()
	{
		$form = new Form;
		$form->addText('username', 'Login:',20,80)
			->addRule(Form::FILLED,"Je nutné zadat Login:.");
		$form->addPassword('password', 'Pass:')
			->addRule(Form::FILLED,"Je nutné vyplnit Pass:.");
		$form->addCheckbox('remember', 'Zůstat přihlášen.');
		$form->addSubmit('ok', 'OK');
			$form->onSuccess[] = callback($this, 'loginFormSubmitted');
		return $form;
	}
	public function loginFormSubmitted(Form $form)
	{
		try {
			$user = $this->getUser();
			$values = $form->getValues();
			if ($values->remember) {
				$user->setExpiration('+ 14 days', FALSE);
			} else {
				$user->setExpiration('+ 20 minutes', TRUE);
			}
			$user->login($values->username, $values->password);
			$this->flashMessage('Přihlášení bylo úspěšné.', 'success');
			$this->redirect('Zpravy:');

		} catch (NS\AuthenticationException $e) {
			$this->flashMessage('Vaše uživatelské jméno nebo heslo je chybné.', 'success');
			$form->addError($e->getMessage());
		}
	}

Problém je v tom že mi laděnka vyhodí vyjímku při špatném zadání hesla nebo jména, tedy nezafunguje try.
A to na řádku $user->login($values->username, $values->password);
Nevíte prosím čím by to mohlo být?

22
Člen | 1478
+
0
-

..že by to bylo tím, že nemáš definovaný authenticator? Proč sem nepošleš chybu, jakou to hlasí?

zoool
Člen | 89
+
0
-

Nee authenticator je v pořádku, přihlášení proběhne bez problému, ale jak říkám vyhodí to vyjímku když jsou údaje neplatné

hází to chybu třeba tuto

Nette\Security\AuthenticationException #2

Invalid password. search►
Source file ▼

File: .../app/models/Authenticator.php   Line: 42

32:     public function authenticate(array $credentials)
33:     {
34:         list($username, $password) = $credentials;
35:         $row = $this->users->where('email', $username)->fetch();
36:
37:         if (!$row) {
38:             throw new NS\AuthenticationException("User '$username' not found.", self::IDENTITY_NOT_FOUND);
39:         }
40:
41:         if ($row->heslo !== $this->calculateHash($password)) {
42:             throw new NS\AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL); 43:         }
44:         //$row2 = clone $row;
45:         unset($row->heslo);
46:         if(count($row->related('pra_entit')))
duke
Člen | 650
+
0
-

Nejspíš jsi zapomněl udělat alias NS pro Nette\Security. Tj. přidat následující kód do skriptu, kde zachytáváš výjimku NS\AuthenticationException.

use Nette\Security as NS;

Pro presenter je to pak něco jiného než Nette\Security\AuthenticationException a tak to nezachytí…

Editoval duke (21. 3. 2012 22:04)

zoool
Člen | 89
+
0
-

Super děkuji, byla v tom jmenném prostoru chyba. Už vše funguje jak má… ještě jednou díky