Vypisování chyb z formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Honza_Vaclavik
- Člen | 20
Zdravím,
nemůžu přijít na to, jak vypsat ve formu pro přihlášení chyby
z authenticatoru.
Určitě to bude nějaká drobnost, za to se omlouvám, ale nemůžu
zjistit která.
Form:
{form signInForm}
<!-- Jednoduché vykreslení chyb -->
<ul n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
<table>
<tr class="required">
<th>{label email /}</th>
<td>{input email}</td>
</tr>
<tr class="required">
<th>{label password /}</th>
<td>{input password}</td>
</tr>
<tr>
<td>{input remember}</td>
</tr>
</table>
{input send}
{/form}
FormFactory:
public function createIn()
{
$form = new Form;
$form->addText('email', 'Email:')
->setType('email')
->setRequired('Zadejte email, pod kterým jste se registrovali');
$form->addPassword('password', 'Password:')
->setRequired('Zadejte heslo');
$form->addCheckbox('remember', 'Pamatovat si přihlášení');
$form->addSubmit('send', 'Přihlásit se');
$form->onSuccess[] = function ($form, $values) {
try {
$this->user->login($values['email'], $values['password']);
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
$form->getPresenter()->redirect('this');
}
if ($values['remember']) {
$this->user->setExpiration('14 days', FALSE);
} else {
$this->user->setExpiration('20 minutes', TRUE);
}
$form->getPresenter()->redirect('Dashboard:default');
};
return $form;
}
Authenticator:
public function authenticate(array $credentials)
{
list($email, $password) = $credentials;
$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_EMAIL, $email)->where(self::COLUMN_PASSWORD_HASH, Nette\Security\Passwords::hash($password))->fetch();
if (!$row) {
throw new AuthenticationException('Špatné přihlašovací údaje.', self::IDENTITY_NOT_FOUND);
}else if ($row['mail_verified'] == 0){
throw new AuthenticationException('Účet není aktivován. Aktivujte přes link, který byl zaslán na Váš email');
}
/* elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
dump('wrong password');
throw new AuthenticationException('Zadal/a jste špatné heslo.', self::INVALID_CREDENTIAL);
}*/
/* elseif (Passwords::needsRehash($row[self::COLUMN_PASSWORD_HASH])) {
$row->update(array(
self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
));
}*/
$arr = $row->toArray();
$accManager = new AccountManager($this->database);
$userData = array();
$userData['url_name_set'] = $accManager->completeUrlName($arr[self::COLUMN_URL_NAME], $arr[self::COLUMN_URL_NAME_INDEX]);
$userData['role'] = $arr['role'];
unset($arr[self::COLUMN_PASSWORD_HASH]);
return new Nette\Security\Identity($row[self::COLUMN_ID], NULL, $userData);
}
- Honza_Vaclavik
- Člen | 20
David Matějka napsal(a):
smaz to
$form->getPresenter()->redirect('this');
To jsem už předtím zkoušel, bohužel to nezabralo.
- Honza_Vaclavik
- Člen | 20
Antik napsal(a):
Nahraď
$form->getPresenter()->redirect('this');
nareturn;
Děkuji mnohokrát, ušetřil jste mi mnoho vytrhaných vlasů ;)