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
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
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
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 ???