Neodchycená exception po Log In
- icanjan
- Člen | 30
Uf, tak to po několika hodinách s Nette zase vzdávám a ptám se:
řeším přihlášení (log in)
V UserManager.php mám poslepované z různých kousků kódu:
public function authenticate(array $credentials)
{
list($email, $password) = $credentials;
$row = $this->database->table('uzivatele')->where('email', $email)->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('The username is incorrect.', self::IDENTITY_NOT_FOUND);
///} elseif (!Passwords::verify($password, $row['heslo'])) {
} elseif ($password != $row['heslo']) {
throw new Nette\Security\AuthenticationException('The password is incorrect.', self::INVALID_CREDENTIAL);
}
$arr = $row->toArray();
unset($arr['heslo']);
return new Nette\Security\Identity($row[self::COLUMN_EMAIL], $row[self::COLUMN_EMAIL], $arr);
}
V HomepagePresenter.php mám pak metodu:
public function signInFormSubmitted(\Nette\Forms\Controls\SubmitButton $btn) {
$form = $btn->getForm();
$user = $this->getUser();
$values = $btn->getForm()->getValues();
$this->getUser()->setExpiration('+ 14 days', FALSE);
try {
$this->flashMessage($values->password, 'success');
$this->getUser()->login($values->email, $values->password);
} catch (Nette\Security\AuthenticationException $e) {
// $form->addError($e->getMessage());
$this->flashMessage("spatne heslo", 'success');
$this->redirect('this');
return;
}
$this->redirect('Homepage:');
}
Když do formuláře vyplním dobře email(login) a špatné heslo, tak to
vyhodí exception. Podle očekávání. Ale zobrazí mě chybu The
password is incorrect. i debugger.
Proč? Vždyť tam mám právě proto catch
(Nette\Security\AuthenticationException $e), abych si ji odchytil.
Heslo (zatím) nijak nešifruju (snad). V databázi ho zatím vydím, jak jsem
ho napsal.
- icanjan
- Člen | 30
Mám… předpokládám, že kdybych neměl, nějaká chyba by se objevila mnohem dřív.
Jinak, když si tak zkouším různě přihlašovat se špatným/dobrým
heslem, tak to občas vyhodí i:
Possible problem: you are sending a HTTP header while already having
some data in output buffer. Try OutputDebugger or start session
earlier.
To už vůbec netuším, co to znamená a jak to spravit. já tam žádnou session nikde nepoužím (nebo o tom zatím nevím). Jediné, co jsem pro přihlášení uživatele udělal jsou ony dva kousky kodu v prvním příspěvku.
Editoval icanjan (6. 7. 2014 21:52)
- Petr Hudík
- Člen | 49
icanjan napsal(a):
Jinak, když si tak zkouším různě přihlašovat se špatným/dobrým heslem, tak to občas vyhodí i:
Possible problem: you are sending a HTTP header while already having some data in output buffer. Try OutputDebugger or start session earlier.
Tato chybová zpráva může být způsobena například nějakým zapomenutým echem, nebo jiným výstupem – cokoliv co vypíšeš na výstup před tím, než se v Nette nastartují hlavičky. Mohlo by to být způsobeno i BOM, nebo nějakým textem před značkou ‚<?php‘, ale protože zde píšeš, že je to jen někdy, vyzkoušel bych, zda se v nějaké podmínce nenchází právě výstup.
Proč se zde vyhodí tahle výjimka můžeme jen obtížně hádat – nejlepší by bylo kód odkrokovat, kouknout se, jaké hodnoty jsou právě v dané podmínce…