Neodchycená exception po Log In

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
icanjan
Člen | 30
+
0
-

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)

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);
	}

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.

David Matějka
Moderator | 6445
+
0
-

A mas na zacatku use Nette?

Editoval matej21 (6. 7. 2014 21:29)

icanjan
Člen | 30
+
0
-

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
+
0
-

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…