Quick Starts – problém s přihlášením

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

Zdar lidi, s nette začínám a dostal sem se přes quickstart až ke kapitole s přihlášením (dalo mě to dost zabrat vzhledem k tomu, že to co je na gitu je uplně jiný než v quickstartu a upřímně musim říct, že je to ten nejde*ilnější návod co sem kdy čet :D ale Nette musím pochválit :D)

No k mému problému, vubec mě nejede přihlašování, jména mám Jon Doe a Jane Doe (z SQL dat z první kapitoly), ale neznám hesla :( když napíšu blbě heslo, tak mě to hodí výjmku AuthenticationException

Zde je kod:

<?php

namespace Todo;

use Nette,
	Nette\Security,
	Nette\Utils\Strings;


/**
 * Users authenticator.
 */
class Authenticator extends Nette\Object implements Security\IAuthenticator
{
	/** @var UserRepository */
	private $users;



	public function __construct(UserRepository $users)
	{
		$this->users = $users;
	}



	/**
	 * Performs an authentication.
	 * @return Nette\Security\Identity
	 * @throws Nette\Security\AuthenticationException
	 */
	public function authenticate(array $credentials)
	{
		list($username, $password) = $credentials;
		$row = $this->users->findByName($username);

		if (!$row) {
			throw new Security\AuthenticationException('The username is incorrect. FUCK', self::IDENTITY_NOT_FOUND);
		}

		if ($row->password !== $this->calculateHash($password, $row->password)) {
			throw new Security\AuthenticationException('The password is incorrect. FUCK', self::INVALID_CREDENTIAL);
		}
		unset($row->password);
		return new Security\Identity($row->id, NULL, $row->toArray());
	}



	/**
	 * @param  int $id
	 * @param  string $password
	 */
	public function setPassword($id, $password)
	{
		$this->users->findBy(array('id' => $id))->update(array(
			'password' => $this->calculateHash($password),
		));
	}



	/**
	 * Computes salted password hash.
	 * @param string
	 * @return string
	 */
	public static function calculateHash($password, $salt = NULL)
	{
		if ($password === Strings::upper($password)) { // perhaps caps lock is on
			$password = Strings::lower($password);
		}
		return crypt($password, $salt ?: '$2a$07$' . Strings::random(22));
	}

}

prakticky to co je na gitu, ale když zakomentuju ten blok if ($row) a if (!$row) tak mě to hodí výjmku Trying to get property of non-object

  • doufal jsem, že to nehodí vyjmku, ale pouze to vypíše, že jste zadaly špatné uživatelské jméno nebo heslo

můžete mi nějak pomoct? už jsem udělal takovejch úprav, že jsem v tom ztracen

jiri.pudil
Nette Blogger | 1032
+
0
-

doufal jsem, že to nehodí vyjmku, ale pouze to vypíše, že jste zadaly špatné uživatelské jméno nebo heslo

To už ale není zodpovědnost Authenticatoru. Tam, kde voláš metodu authenticate (tzn. při zpracování přihlašovacího formuláře v presenteru) bys měl výjimku odchytit a eventuelně vypsat chybovou hlášku. Tak to je ostatně v quickstartu napsané.

Btw nejaktuálnější quickstart je ten anglický

CJHornster
Člen | 56
+
0
-

no když to odkomentuji, tak mě laděnka vyhodí výjmku, ale jinak v Presenteru mám vše dobře, neměl by tedy presenter výjmku odchytit?

moc díky za anglickej tutoriál předělal jsem presenter podle english verze a vše jde v pořádku ;)
jen by mě zajímaly ty hesla :D

Editoval CJHornster (27. 6. 2013 15:00)