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
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?
- zoool
- Člen | 89
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
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)