Při zadání špatného hesla do login formuláře se zobrazí laděnka s chybou „Špatné heslo“
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- diablos
- Člen | 36
Zdravím, login formulář pracuje v pořádku. Jediná chyba, na kterou nemůžu přijít je: při zadání špatného hesla se zobrazí laděnka s chybou Nette\Security\AuthenticationException #2 – Špatné heslo.
LoginForm
<?php
class LoginForm extends BaseForm {
public function __construct($parent = NULL, $name = 'LoginForm') {
parent::__contruct($parent, $name);
$this->getElementPrototype()->novalidate = 'novalidate';
$this->addText('userName', NULL)
->setAttribute('placeholder', 'E-mail')
->addRule(Form::FILLED, 'Zadejte prosím e-mail.');
$this->addPassword('userPass', NULL)
->setAttribute('placeholder', 'Heslo')
->addRule(Form::FILLED, 'Zadejte prosím heslo.');
$this->addSubmit('login', 'Přihlásit');
$this->addButton('registration', 'Registrovat');
$this->onSuccess[] = callback($this, 'formSubmited');
}
public function formSubmited(LoginForm $form) {
try {
$data = $form->getValues();
$user = $this->getPresenter()->getUser();
$user->setExpiration('+ 30 minutes', TRUE);
$user->login($data->userName, $data->userPass);
$this->getPresenter()->flashMessage('Přihlášení úspěšné', 'success');
...
}
catch (AuthenticationException $e) {
$this->getPresenter()->flashMessage($e->getMessage(), 'error');
$this->getPresenter()->redirect('Public:Login:default');
}
}
}
?>
Autheticator
<?php
public function authenticate(array $credentials) {
$userName = $credentials[self::USERNAME];
$userPass = $credentials[self::PASSWORD];
$row = $this->connection->query(...)->fetch();
if (!$row) throw new AuthenticationException("Uživatel $userName neexistuje.", self::IDENTITY_NOT_FOUND);
$password = sha1($userPass . $this->salt);
if ($password !== $row->password)
throw new AuthenticationException('Špatné heslo.', self::INVALID_CREDENTIAL);
...
}
else $identity = new Identity($row->userId, $row->role);
return $identity;
}
?>
Díky za řešení!
- 22
- Člen | 1478
Sandbox v ditribuci mimojiné obsahuje i vzor přihlašovacího formuláře
včetně Authenticatoru, takže hledej rozdíl. Osobně bych to tipnul na
redirect
v catch bloku zpracování formuláře.
btw proč používáš Form `místo `AppForm
a proč nepoužíváš
Nette2?
Editoval 22 (10. 10. 2011 1:02)